zoukankan      html  css  js  c++  java
  • 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的防火墙给关闭,否则会报异常的。

      

  • 相关阅读:
    SGU 495 Kids and Prizes 概率DP 或 数学推理
    poj 2799 IP Networks 模拟 位运算
    uva 202 Repeating Decimals 模拟
    poj 3158 Kickdown 字符串匹配?
    uva 1595 Symmetry 暴力
    uva 201 Squares 暴力
    uva 1594 Ducci Sequence 哈希
    uva 1368 DNA Consensus String 字符串
    数字、字符串、列表的常用操作
    if条件判断 流程控制
  • 原文地址:https://www.cnblogs.com/liuling/p/2013-6-16-01.html
Copyright © 2011-2022 走看看