zoukankan      html  css  js  c++  java
  • Hadoop入门进阶步步高(五)-搭建Hadoop集群

    五、搭建Hadoop集群

    上面的步骤,确认了单机能够运行Hadoop的伪分布运行,真正的分布式运行无非也就是多几台slave机器而已,配置方面的有一点点差别,配置起来就很easy了。

    1、准备三台server

    192.168.56.101

    192.168.56.102

    192.168.56.103

    在每台机器的/etc/hosts中都将iphostname给映射上:

    192.168.56.101  nginx1

    192.168.56.102  nginx2

    192.168.56.103  nginx3

    当中192.168.56.101为前面配置的那台server,用于做为namenodejobtracker,另外两台用于做slaves,用于运行datanodetasktracker

    要使某台server成为namenode,必须在要core-site.xml中指定它;要使某个节点成为jobtracker,必须在mapred-site.xml指定它,这个參见第5点中的core-site.xml以及mapred-site.xml的配置。

    Hadoop来说,从hdfs的角度来看有namenodedatanodenamenode仅仅能够有一个,而datanode能够有多个,namenode存放的是datanode中文件的元数据,client通过namenode获取datanode中文件的信息;从jobtracker角度来说看有jobtrackertasktrackerjobtracker仅仅能够有一个,而tasktracker能够有多外,tasktracker通过jobtracker来调度。

    在本例中使用192.168.56.101做为namenodejobtracker,使用192.168.56.102做为secondarynamenodedatanode以及tasktracker,使用192.168.56.103做为datanode以及tasktracker,详情參见以下的配置。

    2、三台server要具有一致的配置信息

    1)、JDK的路径必须同样;

    2)、操作Hadoop的用户必须同样;

    3)、Hadoop的存放路径必须同样;

    Slave机器上的hadoop可直接将namenode上面的hadoop拷贝过去,不用做不论什么改动,仅仅要路径放置就能够了;

    4)、每台机器~/.ssh文件夹下存放同样的id_rsaauthorized_keys

    namenode的机器上的~/.ssh/id_rsaauthorized_keys复制到每台slave机器上的~/.ssh中,当然slave机器中也必须是安装了ssh的了,然后在每台机器上都通过ssh訪问一下其他的两台机器,确保都是能够不输入password訪问的。

    5)、三台机器的/etc/profile中的内容同样;

    3、改动$HADOOP_HOME/conf/slaves文件

    这个文件存放的是全部datanodeIP或者机器名,每行指定一个。我们这里使用nginx2nginx3来做为datanode,因此slaves文件的配置例如以下:

    nginx2

    nginx3

    4、改动$HADOOP_HOME/conf/masters文件(此例中可选)

    masters文件里放置的是secondarynamenode的机器名,当中默认的内容为“localhost”,可是在生产环境中,肯定不会将namenodesecondarynamenode放置在同一台server上,在此例中我就将secondarynamename设置在第二台server上,那么此时文件里的内容应该例如以下:

    #这里仅仅使用一台做为secondarynamenode

    nginx2

    #nginx3

    5、改动core-site.xmlmapred-site.xmlhdfs-site.xml

    仅仅须要做简单的改动就能够了,不同点以红色字体标识出。

    core-site.xml:

    <configuration>  

      <property>  

        <!-- 用于设置Hadoop的文件系统,由URI指定,value相应的server就是namenode所在的server及port,secondarynamenode通过在masters这个文件里指定 -->

        <name>fs.default.name</name>  

        <value>hdfs://nginx1:9000</value>  

      </property>  

      <property>

    <!-- 配置Hadoop的暂时文件夹,默认在/tmp文件夹下,可是/tmp上面可能会被系统自己主动清理掉。-->

    <name>hadoop.tmp.dir</name>

    <!-- 文件夹假设不存在,须要手动创建 -->

        <value>/home/fenglibin/hadoop_tmp</value>

        <description>A base for other temperary directory</description>

      </property>

    </configuration>  

    mapred-site.xml

    <configuration>  

      <property>  

        <!-- value相应的值为jobtracker所在的server及port,tasktrackerslaves中指定 -->

        <name>mapred.job.tracker</name>  

        <value>nginx1:9001</value>  

      </property>  

    </configuration>

        hdfs-site.xml

    <configuration>  

      <property>

        <!-- 指定其副本数,value的值表示副本的数量 -->  

    <name>dfs.replication</name>  

    <!-- 这里有两台datanode -->

        <value>2</value>  

      </property>  

    </configuration>

    6、启动验证

    6.1查看进程

    DataNode都是通过NameNode启动起来的,因而启动的时候仅仅须要在NameNode上运行start-all.sh就能够了,此时我们查看各server中的进程。

    Nginx1NameNode)所在server:

    fenglibin@ubuntu1110:/usr/local/hadoop-1.2.1$ jps

    2834 NameNode

    3011 JobTracker

    3108 Jps

    Ngnix2

    fenglibin@ubuntu11102:~$ jps

    984 DataNode

    1075 TaskTracker

    919 SecondaryNameNode

    1420 Jps

    Ngnix3

    fenglibin@ubuntu11103:~$ jps

    1374 Jps

    1021 TaskTracker

    846 DataNode

    从上面的进程信息,能够看到nginx1中启动了namenodejobtracker,nginx2nginx3都分别启动了DataNode及TaskTracker,仅仅是nginx2中比nginx3中多启动了一个SecondaryNameNode,这也是我们希望的结果。

    通过例如以下命令:

    hadoop dfsadmin -report

    可得到例如以下输出:

    Warning: $HADOOP_HOME is deprecated.

    Safe mode is ON

    Configured Capacity: 15283421184 (14.23 GB)

    Present Capacity: 10592149504 (9.86 GB)

    DFS Remaining: 10591629312 (9.86 GB)

    DFS Used: 520192 (508 KB)

    DFS Used%: 0%

    Under replicated blocks: 20

    Blocks with corrupt replicas: 0

    Missing blocks: 0

    -------------------------------------------------

    Datanodes available: 2 (2 total, 0 dead)

    Name: 192.168.56.102:50010

    Decommission Status : Normal

    Configured Capacity: 7641710592 (7.12 GB)

    DFS Used: 307200 (300 KB)

    Non DFS Used: 2733502464 (2.55 GB)

    DFS Remaining: 4907900928(4.57 GB)

    DFS Used%: 0%

    DFS Remaining%: 64.23%

    Last contact: Sun Jun 15 15:46:39 CST 2014

    Name: 192.168.56.103:50010

    Decommission Status : Normal

    Configured Capacity: 7641710592 (7.12 GB)

    DFS Used: 212992 (208 KB)

    Non DFS Used: 1957769216 (1.82 GB)

    DFS Remaining: 5683728384(5.29 GB)

    DFS Used%: 0%

    DFS Remaining%: 74.38%

    Last contact: Sun Jun 15 15:46:39 CST 2014

    6.2 集群状态监控页面

    查看namenode的状态

    namenode是布署在192.168.56.101上,仅仅须要输入:

    http://192.168.56.101:50070

    就可以查看namenode的状态,例如以下图所看到的:

     

    查看jobtracker的状态

    jobtrackernamenode是布署在同一台机器上的,输入:

    http://192.168.56.101:50030

    就可以查看jobtracker的状态,例如以下图所看到的:

     

    查看secondarynamenode的状态

    Secondarynamenode是布署在192.168.56.102上面,输入:

    http://192.168.56.102:50090

    就可以查看其状态,例如以下:

     

    查看192.168.56.102上面的tasktracker的状态,打入:

    http://192.168.56.102:50060

    查看状态,例如以下:

     

    从上面能够看出,监控的服务,都是以“500*”port对外提供服务,只是这里发现一个问题,同为datanode以及tasktracker192.168.56.103上面却没有开启一个“500*”这种port,而192.168.56.102上却开启除secondarynamenode之外的其他4个“500*”这种port:

    192.168.56.102

     

    当中port50090secondarynamenode的监控port,而50060tasktracker的监控port,而5001050075以及50020都是datanode使用的port。

    而在192.168.56.103上,却仅仅开了两个port:

     

    分别与namenode以及jobtracker相连着的。

    为什么在192.168.56.103上面tasktracker以及datanode的监控呢?

  • 相关阅读:
    GetClassLoader和GetCallerClass的使用
    Maven的生命周期和插件
    对象池原理简要描述
    Git x SVN rebase事故
    Git 二进制文件冲突解决
    Git x SVN 当前工作流程
    Laya 项目解耦
    Laya 利用JS进行反射
    Laya Tween 和 遮罩
    Laya Tween循环
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4007329.html
Copyright © 2011-2022 走看看