• hadoop环境搭建


    今天终于把hadoop集群环境给搭建起来了,能够运行单词统计的示例程序了。

    集群信息如下:

    主机名

    Hadoop角色

    Hadoop jps命令结果

    Hadoop用户

    Hadoop安装目录

    master

    Master

    slaves

    NameNode

    DataNode

    JobTracker

    TaskTracker

    SecondaryNameNode

    创建相同的用户的组名:hadoop。

    安装hadoop-0.20.2时使用hadoop用户,并且hadoop的文件夹归属也是hadoop:hadoop

    /opt/hadoop

    slave1

    slaves

    DataNode

    TaskTracker

    slave2

    slaves

    DataNode

    TaskTracker

      注:master即使master又是slave.

    搭建步骤如下:

      一、首先是搞好master

      1、创建用户组

        groupadd hadoop  添加一个组

        useradd hadoop -g hadoop  添加用户

      2、jdk的安装

        这里安装的版本是jdk-7u9-linux-i586.tar.gz ,使用 tar -zsvf jdk-7u9-linux-i586.tar.gz  -C /opt/  命令将其解压到/opt目录下,并将解压后的文件夹jdk-7u9-linux-i586改名为java.

        jdk安装好就要配置环境变量了,使用vi /etc/profile命令编辑添加如下内容:

        export JAVA_HOME=/opt/java/jdk
        exprot PATH=$JAVA_HOME/bin:$PATH

        配置好之后要用命令source /etc/profile使配置文件生效,这样jdk就安装完毕了。安装完之后不要忘了将所有者设置为hadoop。

    使用命令chown -R hadoop:hadoop java/

      3.hadoop的安装

        hadoop的版本是hadoop-0.20.2.tar.gz,也把它解压到/opt目录下面,改名为hadoop。

        hadoop也要设置环境变量,使用vi /etc/profile命令编辑添加如下内容:

        export HADOOP_HOME=/opt/hadoop

        export PATH=$HADOOP_HOME/bin:$PATH

        同样也要执行source /etc/profile使配置文件生效,然后执行命令使用命令chown -R hadoop:hadoop hadoop/将其所有者改为hadoop

      4、修改地址解析文件/etc/hosts,加入

        192.168.137.110 master

        192.168.137.111 slave1

        192.168.137.112 slave2

      5、修改hadoop的配置文件

      首先切换到hadoop用户,su hadoop

      ①修改hadoop目录下的conf/hadoop-env.sh文件

        加入java的安装路径export JAVA_HOME=/opt/java/jdk

      ②把hadoop目录下的conf/core-site.xml文件修改成如下:

    复制代码
     1 <property>
     2   <name>hadoop.tmp.dir</name>
     3   <value>/hadoop</value>
     4 </property>
     5 <property>
     6   <name>fs.default.name</name>
     7   <value>hdfs://master:9000</value>
     8 </property>
     9 <property> 
    10   <name>dfs.name.dir</name>           
    11   <value>/hadoop/name</value> 
    12 </property> 
    复制代码

      ③把hadoop目录下的conf/ hdfs-site.xml文件修改成如下:

    复制代码
    1 <property>
    2     <name>dfs.replication</name>  
    3     <value>3</value>
    4 </property>
    5 <property>
    6     <name>dfs.data.dir</name>  
    7     <value>/hadoop/data</value>
    8 </property>
    复制代码

      ④把hadoop目录下的conf/ mapred-site.xml文件修改成如下:

    复制代码
     1 <property>
     2     <name>mapred.job.tracker</name>  
     3     <value>master:9001</value>
     4 </property>
     5 <property>
     6     <name>mapred.system.dir</name>  
     7     <value>/hadoop/mapred_system</value>
     8 </property>
     9 <property>
    10     <name>mapred.local.dir</name>  
    11     <value>/hadoop/mapred_local</value>
    12 </property>
    复制代码

      ⑤把hadoop目录下的conf/ masters文件修改成如下:

        master

      ⑥把hadoop目录下的conf/ slaves文件修改成如下:

        master

        slave1

        slave2

      6、复制虚拟机

          我使用Virtual Box的克隆功能,将主机master完全克隆两份:slave1和slave2,并修改相应的主机名和IP地址,这样就可以简单地保持hadoop环境基本配置相同。

      7、SSH设置无密码验证

          切换到Hadoop用户,在Hadoop家目录下面创建.ssh目录,并在master节点上生成密钥对:ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa   。然后一直按[Enter]键,按默认的选项生成密钥对保存在.ssh/id_rsa文件中。

        然后执行如下命令:

    $ ssh ~/.ssh

    $ cp id_rsa.pub authorized_keys

    $ scp authorized_keys slave1:/home/hadoop/.ssh

    $ scp authorized_keys slave2:/home/hadoop/.ssh

        执行远程复制文件的时候记得要把slave1和slave2的防火墙关掉。复制完毕后记得要到slave1和slave2去修改该文件的权限。

    从master向slave1和slave2发起SSH连接,第一次登录时需要输入密码,以后就不需要了。

    $ ssh slave1

    $ ssh slave2

    我们只需要配置从master向slaves发起SSH连接不需要密码就可以了,但这样只能在master(即在主机master)启动或关闭hadoop服务。

      8、运行hadoop

        使用Hadoop用户,切换到hadoop/bin目录下

        格式化分布式文件系统./hadoop namenode -format

        执行命令./start-all.sh启动hadoop

        在master上执行jps命令查看运行的进程如下:

    复制代码
    [hadoop@master hadoop]$ jps
    3200 SecondaryNameNode
    3271 JobTracker
    3370 TaskTracker
    3002 NameNode
    3106 DataNode
    5687 Jps
    复制代码

        在slave1和slave2上执行jps结果如下:

    [hadoop@slave1 ~]$ jps
    1477 DataNode
    3337 Jps
    1547 TaskTracker

        访问http://master:50070可以查看分布式文件系统的状态

      9、运行单词统计程序

        WordCount是hadoop自带的实例,统计一批文本文件中各单词出现的资料,输出到指定的output目录中,输出目录如果已经存在会报错。

    $ cd /opt/hadoop
    $ hadoop fs -mkdir input
    $ hadoop fs -copyFromLocal /opt/hadoop/*.txt input/
    $ hadoop jar hadoop-0.20.2-examples.jar wordcount input output
    $ hadoop fs -cat output/*    #最后查看结果

    运行结果如下:

    复制代码
    13/06/16 19:32:26 INFO input.FileInputFormat: Total input paths to process : 4
    13/06/16 19:32:26 INFO mapred.JobClient: Running job: job_201306161739_0002
    13/06/16 19:32:27 INFO mapred.JobClient:  map 0% reduce 0%
    13/06/16 19:32:35 INFO mapred.JobClient:  map 50% reduce 0%
    13/06/16 19:32:36 INFO mapred.JobClient:  map 100% reduce 0%
    13/06/16 19:32:47 INFO mapred.JobClient:  map 100% reduce 100%
    13/06/16 19:32:49 INFO mapred.JobClient: Job complete: job_201306161739_0002
    13/06/16 19:32:49 INFO mapred.JobClient: Counters: 18
    13/06/16 19:32:49 INFO mapred.JobClient:   Job Counters 
    13/06/16 19:32:49 INFO mapred.JobClient:     Launched reduce tasks=1
    13/06/16 19:32:49 INFO mapred.JobClient:     Rack-local map tasks=2
    13/06/16 19:32:49 INFO mapred.JobClient:     Launched map tasks=4
    13/06/16 19:32:49 INFO mapred.JobClient:     Data-local map tasks=2
    13/06/16 19:32:49 INFO mapred.JobClient:   FileSystemCounters
    13/06/16 19:32:49 INFO mapred.JobClient:     FILE_BYTES_READ=179182
    13/06/16 19:32:49 INFO mapred.JobClient:     HDFS_BYTES_READ=363457
    13/06/16 19:32:49 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=358510
    13/06/16 19:32:49 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=133548
    13/06/16 19:32:49 INFO mapred.JobClient:   Map-Reduce Framework
    13/06/16 19:32:49 INFO mapred.JobClient:     Reduce input groups=10500
    13/06/16 19:32:49 INFO mapred.JobClient:     Combine output records=10840
    13/06/16 19:32:49 INFO mapred.JobClient:     Map input records=8968
    13/06/16 19:32:49 INFO mapred.JobClient:     Reduce shuffle bytes=179200
    13/06/16 19:32:49 INFO mapred.JobClient:     Reduce output records=10500
    13/06/16 19:32:49 INFO mapred.JobClient:     Spilled Records=21680
    13/06/16 19:32:49 INFO mapred.JobClient:     Map output bytes=524840
    13/06/16 19:32:49 INFO mapred.JobClient:     Combine input records=47258
    13/06/16 19:32:49 INFO mapred.JobClient:     Map output records=47258
    13/06/16 19:32:49 INFO mapred.JobClient:     Reduce input records=10840
    复制代码

      运行该程序一定得注意将slave1和slave2的防火墙给关闭,否则会报异常的。

    /注:转载来的,还没测试,看着步骤挺符合规矩的。转自http://www.cnblogs.com/liuling/archive/2013/06/16/2013-6-16-01.html

  • 相关阅读:
    openwrt
    第37章 socket编程 之练习:实现简单的web服务器
    Unix domain socket IPC
    String题目解析1
    this()与super()
    if当中是赋值怎么办
    编译时检查错误有哪些
    int与Integer
    log4j日志级别怎么搞
    数据库标准八步每一步中的作用
  • 原文地址:https://www.cnblogs.com/liuwenbohhh/p/4944622.html
Copyright © 2020-2023  润新知