HADOOP 2.x 完全分布式集群环境搭建

来源:互联网 发布:河北js防水厂家 编辑:程序博客网 时间:2024/06/06 04:00
本文目的:搭建 HDFS 2.x 高可用的 分布式集群环境。
集群架构

集群组成
Namenode:2台
Datanode:  3台
Journalnode:3台
Zookeeper: 3台
ZKFC:2台
ResourceManager:2台
NodeManager:3台
具体安排
         本文中准备node~4 四台虚拟机:
                    node1:  192.168.152.101
                    node2 : 192.168.152.102
                    node3 : 192.168.152.103
                    node4 : 192.168.152.104
          用这四台虚拟机搭建起分布式环境,具体的分布如下:
 NamenodeDatanodeJournalnodeZookeeperZKFCResourceManagerNodeManagernode1            1 111  node2            1  1111node3   1111node4   1   11
软件版本 
          系统版本:
                    CentOS6.5
          软件版本:
                    JDK:           jdk-7u67-linux-x64
                    Hadoop:     hadoop-2.5.1_x64
                    Zookeeper:zookeeper-3.4.6

具体步骤
一、关闭防火墙、修改主机名称、配置hosts文件(node1~node4 都需要配置)
      1、通过命令  service iptables status 查看防火墙是否开启,如开启, 使用命令  service iptables stop 予以关闭;
           通过命令 chkconfig iptables off 禁止防火墙开机启动。
      2、修改node1主机的/etc/sysconfig/network文件,将HOSTNAME分别修改为 node1。另外三台主机的HOSTNAME 分别修改为node2、node3、node4。
      3、修改 /etc/hosts文件 ,添加如下配置:
192.168.152.101 node1192.168.152.102 node2192.168.152.103 node3192.168.152.104 node4
     4、删除持久化文件/etc/udev/rules.d/70-persistent-net.rules  ,重启虚拟主机,使配置生效。
注:持久化文件,该文件记录的是当前主机的MAC地址与IP地址的映射关系。由于我们的4台主机是通过虚拟机克隆的方式得到的,所以4台主机的MAC地址是相同的,这在计算机通讯过程中是不允许的,所以要将持久化文件删除,以重新生成。重启虚拟机时,系统会重新生成4个互不冲突的MAC地址,并将MAC地址与本机当前IP的映射关系记录到持久化文件(重启时,系统检测不到该文件时,会重新生成)当中。      
二、4台主机同步时间
     1、yum install ntp 
     2、ntpdate -c  时间服务器域名  或    ntpdate  IP。自己百度一下,时间服务器的IP,此处我们采用上海交通大学网络中心的NTP服务器地址
ntpdate 202.120.2.101

三、免密钥设置
     NN 与 DN之间需要做免密处理    两台NN之间也需要做免密处理
     如果设置主机A到主机B的免密钥登录,可按如下方式进行:
在A主机执行1、ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa     -t密钥类型(rsa 或 dsa)   -P 旧密码 ''代表为空   -f 密钥文件生成后,保存的位置2、ssh-copy-id 192.168.0.102     IP是主机B的IP地址,将主机A生成的密钥,拷贝到远程主机对应的账户下执行过程中,会提示让输入主机B的登录密码

四、安装JDK、hadoop和zookeeper,并配置环境变量
     上传jdk-7u67-linux-x64.rpm、hadoop-2.5.1_x64.tar.gz、zookeeper-3.4.6.tar.gz到/home/software目录下(路径随意)。
     安装JDK :  rpm -ivh jdk-7u67-linux-x64.rpm 
     解压hadoop和zookeeper,将解压后的文件夹移动至/home目录下(注意,要将解压后的文件夹属主和属组都改成root)
     配置环境变量 /etc/profile
export JAVA_HOME=/usr/java/jdk1.7.0_67export PATH=$PATH:$JAVA_HOME/binexport HADOOP_HOME=/home/hadoop-2.5.1export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbinexport ZOOKEEPER_HOME=/home/zookeeper-3.4.6 ////////注意zookeeper只在node1 node2 node3上部署,node4不需配置这两行export PATH=$PATH:$ZOOKEEPER_HOME/bin

     配置完成后,使用命令source /etc/profile 将配置文件中的内容刷新进内存中。
     可以使用命令 echo $PATH 检验环境变量是否配置成功。
     JDK、hadoop四台主机都需要安装,zookeeper在前三台安装。
     跨主机拷贝文件时可使用命令: scp jdk-7u67-linux-x64.rpm node2:`pwd`(反引号)拷贝到node2主机的相同路径下。
五、搭建zookeeper集群(node1、node2、node3)
     在上一步中,已经将zookeeper解压到指定目录/home下,并配置好了zookeeper的环境变量。
     接下来,配置zookeeper的配置文件。进入目录/home/zookeeper-3.4.6/conf,在此目录下,会有一个配置模板zoo_sample.cfg,我们使用该模板进行修改。
     1、mv zoo_sample.cfg zoo.cfg
     2、zookeeper的详细配置,可以参考zookeeper官网:http://zookeeper.apache.org/doc/r3.4.6/zookeeperStarted.html
            此处在zoo.cfg最后一行,添加如下配置:
dataDir=/opt/zookeeper  ///模板中有此选项,此处将路径进行修改,此路径是zookeeper的快照存储路径,不要使用原有的/tmp下的路径(重启会丢失)server.1=node1:2888:3888server.2=node2:2888:3888server.3=node3:2888:3888
         配置文件修改完成后,进行同步,保证node1~3的zoo.cfg一致。 
     3、在上一步的配置文件中,配置了server.1   server.2  server.3,指定了三台server 1、2、3,但是哪个是1号server,哪个又是2号server,需要我们进行配置。在dataDir指定的路径(/opt/zookeeper)下,创建名为myid的文件,分别写入一个数字(node1主机的myid文件写1,node2主机的myid文件写入2,依次类推。。)
     4、启动zookeeper集群。启动zookeeper集群时,要求同时启动,可以借助xshell撰写栏实现。
               启动命令:zkServer.sh start
               查看状态:zkServer.sh status
               关闭命令:zkServer.sh stop
          注意:启动时,各主机会相互通信,而zookeeper的进程正在启动过程中,有时会出现无法连接的情况。遇到这种情况,可以忽略,稍等片刻之后查看zookeeper的状态,能正常显示出 leader 或 follower ,就算启动成功(启动过程大概几秒钟时间)。如果一直启动失败,可以查看日志文件zookeeper.out,该日志文件的路径是 执行启动命令时所在的路径。
                   

六、搭建Hadoop集群
     hadoop集群的配置文件主要涉及到以下这几个:
          hadoop-env.sh
          core-site.xml
          hdfs-site.xml
          slaves
          mapred-site.xml
          yarn-site.xml
     下面依次进行配置:
1、 hadoop-env.sh  修改JAVA_HOME 的值
export JAVA_HOME=/usr/java/jdk1.7.0_67
2、core-site.xml   在configuration中添加如下配置
<configuration>     <property>         <name>fs.defaultFS</name>         <value>hdfs://myhadoop</value>                ////此处名称需与hdfs-site.xml中dfs.nameservices的值保持一致     </property>     <property>         <name>hadoop.tmp.dir</name>                                                                                                                           <value>/opt/hadoop</value>                       </property>     <property>        <name>ha.zookeeper.quorum</name>        <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>         //////zookeeper集群      </property>     </configuration>注:hadoop.tmp.dir 是hadoop文件系统依赖的基础配置,很多路径都依赖它。如果hdfs-site.xml中不配 置namenode和datanode的存放位置,默认就放在这个路径中。
3、hdfs-site.xml
<configuration>  <property>    <name>dfs.nameservices</name>    <value>myhadoop</value>                        /////此处名称需与core-site.xml中fs.defaultFS的值保持一致  </property>  <property>    <name>dfs.ha.namenodes.myhadoop</name>        //////配置namenode的组成    <value>nn1,nn2</value>  </property>  <property>    <name>dfs.namenode.rpc-address.myhadoop.nn1</name>     ////配置namenode1的rpc端口    <value>hadoop1:8020</value>  </property>  <property>    <name>dfs.namenode.rpc-address.myhadoop.nn2</name>     ////配置namenode2的rpc端口    <value>hadoop2:8020</value>  </property>  <property>    <name>dfs.namenode.http-address.myhadoop.nn1</name>    ////配置namenode1的http端口    <value>hadoop1:50070</value>  </property>  <property>    <name>dfs.namenode.http-address.myhadoop.nn2</name>    ////配置namenode2的http端口    <value>hadoop2:50070</value>  </property>  <property>    <name>dfs.namenode.shared.edits.dir</name>             ////配置journalnode集群    <value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/myhadoop</value>  </property>  <property>    <name>dfs.client.failover.proxy.provider.myhadoop</name>   ////配置后台类。作用:HDFS Client用此类联系处于active状态的namenode    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>  </property>  <property>    <name>dfs.ha.fencing.methods</name>     ////用于主备节点切换时实现隔离机制的    <value>sshfence</value>  </property>  <property>    <name>dfs.ha.fencing.ssh.private-key-files</name>     ////配置密钥的路径 需与前面免密钥设置的路径保持一致    <value>/root/.ssh/id_rsa</value>  </property>  <property>    <name>dfs.journalnode.edits.dir</name>        ////journalnode的持久化文件保存路径    <value>/opt/journal/data</value>  </property>  <property>    <name>dfs.ha.automatic-failover.enabled</name>   ////设置故障自动切换功能可用    <value>true</value>  </property></configuration>
4、slaves  配置Datanode的主机名称,删除原有内容,添加如下配置:
hadoop2hadoop3hadoop4
5、mapred-site.xml    配置yarn 。使用hadoop自带的模板进行配置
     mv mapred-site.xml.template mapred-site.xml
<configuration>    <property>        <name>mapreduce.framework.name</name>        <value>yarn</value>    </property></configuration>
6、yarn-site.xml
<configuration>    <property>        <name>yarn.nodemanager.aux-services</name>        <value>mapreduce_shuffle</value>    </property>    <property>       <name>yarn.resourcemanager.ha.enabled</name>       <value>true</value>    </property>    <property>       <name>yarn.resourcemanager.cluster-id</name>       <value>myyarncluster</value>    </property>    <property>       <name>yarn.resourcemanager.ha.rm-ids</name>       <value>rm1,rm2</value>    </property>    <property>       <name>yarn.resourcemanager.hostname.rm1</name>       <value>hadoop3</value>    </property>    <property>       <name>yarn.resourcemanager.hostname.rm2</name>       <value>hadoop4</value>    </property>    <property>       <name>yarn.resourcemanager.zk-address</name>       <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>    </property></configuration>
7、以上6个配置文件配置完毕后, 同步至其它三台主机:
     scp * hadoop2:`pwd`
     scp * hadoop3:`pwd`
     scp * hadoop4:`pwd`
8、启动journalnode集群。(之所以将journalnode集群放在namenode之前启动,是因为namenode启动时,会往journalnode写入edits日志文件)
     在三台journalnode主机分别启动:
hadoop-daemon.sh start journalnode
9、NN的格式化 与  同步
在其中一台NN上,执行文件系统的格式化操作。注意:此处的格式化并非真正的格式化,而是一些准备和清除操作(比如清空fsimage和edits文件的存储目录下已有的文件)
hdfs namenode -format         
此时,这一台NN已经完成了格式化操作,接下来,需要将格式化之后的文件系统同步到另一台NN。同步时,第二台NN会从第一台NN读取数据,故需要先将第一台NN启动起来。
hadoop-daemon.sh start namenode
第一台NN启动后,在第二台NN上执行以下命令(此时NN尚未启动),即可完成同步操作:
hdfs namenode -bootstrapStandby
10、zookeeper集群的格式化
在上面已经启动了zookeeper集群,故此处在其中一台NN上执行以下命令,完成zookeeper的格式化:
hdfs zkfc -formatZK              /////集群的一些高可用信息读到zookeeper中

至此,Hadoop完全分布式集群的配置工作都已经完成!
接下来,启动集群,在其中一台主机上执行以下命令(最好是在NN上执行,因为NN->DN设置了免密钥):
start-all.sh
然后分别在RS主机上启动resourcemanager
yarn-daemon.sh start resourcemanager
在start-all.sh的时候会有如下信息输出:
        

这里有一个需要注意的地方:
我是在hadoop1上执行的start-all.sh命令,hadoop1上并没有部署resourcemanager,但是打印出的信息显示启动了resourcemanager。why?
真正的执行过程是这样的:执行start-all.sh命令的时候,会在本机(hadoop1)启动一个进程去启动resourcemanager,但是系统发现本机并没有部署resourcemanager,这时候系统会把该进程杀死,但是日志会记录下这个过程。

在上面截图的信息中我们可以看到,集群的启动顺序是:
NN --> DN --> JN  -->ZKFC  --> NM

jps  查看进程

hadoop集群的启动顺序:
1、启动zk集群
   zkServer.sh  start | status
2、start-all.sh
3、手动启动两台RS
   yarn-daemon.sh start resourcemanager

停止顺序:
1、stop-all.sh
2、手动停止两台rs
   yarn-daemon.sh stop resourcemanager
3、停止zk集群



启动完成后,可用浏览器访问:
http://192.168.3.101:50070/

http://192.168.3.102:50070/

http://192.168.3.103:8088


http://192.168.3.104:8088     104主机上的RS处于standby状态,访问104的时候,会跳转到103主机上(跳转使用的是主机名)。


附:在启动集群的过程中,有时会遇到下图的情景:

在启动的过程中,提示namenode或journalnode已经启动了,但是使用使用jps查看进程时,却看不到namenode或journalnode的进程。出现上述情况的原因是,集群上一次关闭时,出现了非正常关闭的情况。解决这种问题的方法就是,手动启动进程。
手动启动进程:hadoop-daemon.sh start namenode/datanode/journalnode/zkfc

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果手机ld被锁怎么办 苹果6太卡了怎么办 东风31泄密案该怎么办 小孩子眼睛近视怎么办才能好起来 u盘丢了没有加密怎么办 公司u盘丢了怎么办 掏耳朵后耳朵痛怎么办 辐射4基地被攻击怎么办 宝珀50噚表带大怎么办 颈如何部皱纹多怎么办 cvt变速箱油少了怎么办 上膛疼 咽唾沫疼怎么办 大便把马桶堵了怎么办 马桶堵了怎么办最简单 马桶堵的水满了怎么办 直冲式马桶堵了怎么办 天梭手表不走了怎么办 机械表老是快该怎么办 机械表有误差 那怎么办 机械表走的快怎么办 新车加了燃油宝怎么办 车离合器片烧了怎么办 车的离合片烧了怎么办 鱼缸没电了缺氧怎么办 水箱的浮球失灵怎么办 鱼缸底滤停电1天怎么办 底滤鱼缸声音大怎么办 马桶提升泵坏了怎么办 汽车前玻璃起雾怎么办 下雨车玻璃起雾怎么办 车玻璃外面起雾怎么办 汽车内玻璃起雾怎么办 汽车前挡风起雾怎么办 车窗内玻璃起雾怎么办 早晨车玻璃起雾怎么办 开空调玻璃起雾怎么办 吹空调闭汗了怎么办 空调吹久了头疼怎么办 吹热空调还头疼怎么办 空调吹多了头痛怎么办 被空调吹的头痛怎么办