当前位置:   article > 正文

Hadoop高可用(HA)集群搭建_hadoop ha搭建好处

hadoop ha搭建好处

需要的安装包

 注意:所有安装包均为    .tar.gz  格式

    1、jdk压缩包 : jdk-8u162-linux-x64.tar.gz

    2、zookeeper压缩包:zookeeper-3.4.6.tar.gz

    3、hadoop压缩包:hadoop-2.7.3.tar.gz

    4、Vmware安装包和CentOs镜像文件:

               vm12 

               镜像: CentOS-6.8-x86_64-bin-DVD1.iso

开始搭建集群

        一.虚拟机准备

            1、安装vm12,这里安装不进行介绍,自行百度安装

                      注意:安装之后可能无法正常使用,需要在dos界面打开虚拟化。

            2、创建3个虚拟机,分别命名为master,slave1,slave2

                          

                          

                之后就是设置主机名和用户名,用户名是普通用户名称,设置虚拟机登录密码 

                都设置后会自动进行安装,直到都安装完成,登录虚拟机就可以

                注意:3台虚拟机都按照相同步骤进行操作,因为安装时间过长,建议3台机器一起安装


二、配置sudo


       

               说明:配置sudo是为了可以很方便的使用root权限。

               好处:配置sudo后可以不切换到root用户便可以使用root权限,防止频繁切换用户之后,导致某一些文件的用户权限不同

               开始配置

                      1、切换用户到root  : su root

                             

                      2、编辑文件:vim /etc/sudoers

                            在root下面增加一行,当前我要给普通用户(lj)赋予sudo权限

                             

                          修改后,保存退出

                     3、切换回普通用户(命令: exit ),尝试sudo是否成功


三、配置静态ip


         说明:虚拟机需要配置景泰网络,防止每次使用时网络变化,集群中的节点都要互相访问,所以要保持节点网络不改变。

         注意:当前使用的为NAT模式

         开始配置静态ip:

                    1、首先需要配置windows下虚拟机使用的网卡,在设置找到网络设置,点击更改适配器选项

                              

                        找到VMnet8这个选项卡,当前虚拟机net模式使用的是VMnet8这个网卡

                               

 

                     右键查看属性,找到IPv4,点击IPv,之后点击属性

                                 

                     点击  使用下面IP地址 ,配置ip,子网掩码,默认网关和首选DNS服务器(DNS可以随意配置,具体原理我也不清楚)

                                  

                       2、配置虚拟机网络。进入到vm12,在编辑中找到虚拟网络编辑器

                                 

                         (1)首先点击更改设置,需要管理员权限才能配置网络。

                         (2)点击VMnet8,可以看到这里是NAT模式,我们虚拟机NAT模式使用的是此网卡,之后便可以对此网卡进行修改

                         (3)修改子网ip,此ip与windows下的子网ip前三段一致,子网掩码与windows下子网掩码一致。

                         (4)之后点击NAT设置,对网络进行修改

                                

                           修改网关IP,这里的网关ip与windows下网关一致

                                

                        3、修改虚拟机内网络设置

                              (1)Linux下查看IP: ifconfig

                                        这里有2项,下面一项是lo(本地环回)可以不管,上面一项才是需要配置的。注意这里我的虚拟网卡是eth0,待会儿修改的也是eth0

                                       

                             (2)修改网络配置文件:首先找到对应目录 : cd /etc/sysconfig/network-scripts/

                                      可以找到ifcfg-eth0的文件,这个就是需要修改的文件

                                    

                            (3)修改文件: 将划线部分改为static(静态),之后在后面新增方框里面的内容

                                      这里ip前3段应该与网关一致,最后一段可自行设置

                                      子网掩码,网关与VMnet8设置的保持一致

                                      DNS1余网关ip一致。

                                   

                           (4)重启虚拟机网络服务:sudo /etc/init.d/networking restart    (吐槽:重启后查询没起作用,所以需要重启,但是配置hostname也需要重启,所以不急

                           (5)修改另外两台虚拟机网络

                       4、修改hostname

                             在这里修改主机名是因为重启之后主机名才生效,所以在这里配置主机名

                             编辑文件:   sudo vim /etc/sysconfig/network

                             将HOSTNAME处修改为需要设置的名称(三台虚拟机都需要修改 我的名称分别为:master,slave1,slave2)

                            

                       5、重启虚拟机,重启后检查

                                   1、网络是否变成了配置的网络

                                   2、检查hostname是否修改,命令:hostname

                                  


四、配置ssh免密登录


             说明:集群各节点之间交互会使用到ssh,所以需要各节点之间免密登录

             注意:此配置必须进行配置 

             这里我已经配置过了,所以具体操作可以查看这篇文章:https://www.jb51.net/article/168598.htm

             文章中配置master的ssh后要试验登录master,此时要是ssh别的节点会发现仍然需要密码。这是因为master有slave1和slave2的公钥,而slave1和slave2没有master的公钥

             所以不能免密登录slave1和slave2。文章中的配置都完成之后再进行测试,不要急(ps:我之前着急测试,发现ssh别的节点需要密码,重新配置了一遍。。。。)


五、安装jdk和搭建zookeeper集群


            说明:zookeeper为了使集群主备namenode之间可以自动切换,防止集群NameNode故障引起集群故障

            1、jdk安装:(简单说明,如有疑问请自行搜索)

                  (1)解压: tar -zxvf  jdk-8u162-linux-x64.tar.gz

                           解压后修改文件夹名称为 jdk

                  (2)配置环境变量:sudo vim /etc/profile (此处配置的是系统变量)

                           在最后一行增加:

                                     export JAVA_HOME=/home/lj/cdh/jdk
                                     export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

                                     export PATH=$JAVA_HOME/bin:$PATH

                 (3)刷新配置:source /etc/profile

                   (4)检验:

                                         java -version 

                                         javac

           2、zookeeper安装:

                1、解压:  tar -zxvf zookeeper-3.4.6.tar.gz   

                     解压后修改文件夹名称为 zookeeper

                2、创建文件夹:

                             (1)在zookeeper下创建tmp文件夹(与bin文件夹同级)

                                   

                             (2)在tmp文件夹中创建log文件夹

                             (3)在tmp文件夹下创建myid文件(必须名称为myid)

                                     

               3、修改conf下文件

                     cd zookeeper/conf 

                     复制zoo_sample.cfg为zoo.cfg 。命令:  cp  zoo_sample.cfg zoo.cfg

                     

                     修改zoo.cfg文件:   vim zoo.cfg 

                           其中:dataDir为数据存储位置

                                      dataLogDir为zookeeper位置文件路径

                          在最后新增3行,2888是节点之间通讯端口,3888是节点之间选举端口。新增内容如下

                                      server.1=master:2888:3888
                                      server.2=slave1:2888:3888
                                      server.3=slave2:2888:3888

                    

             4、将zookeeper文件夹发送至其余节点上:

                    scp  ./zookeeper lj@slave1:/home/lj/cdh/

                    scp  ./zookeeper lj@slave2:/home/lj/cdh/

             5、修改各节点zookeeper文件夹里的myid文件

                  vim myid

                  在master的myid中输入1,之后保存

                  在slave1的myid中输入2,之后保存

                  在slave2的myid中输入3,之后保存

                 这里的myid为zookeeper节点的编号,在启动时会用来进行节点选举。

               注意:因为我所有的节点的目录结构完全一致,所以zoo.cfg文件中的dataDir和dataLogDir都一样不用更改。若目录结构不一致则需要更改

            6、启动zookeeper

                  启动脚本在bin文件夹下,每个节点都要启动

                 启动命令为:   zookeeper/bin/zkServer.sh start 

                  启动之后使用jps查看进程

                      

     7、登录zookeeper集群

            登录测试集群是否正常,登录脚本在bin目录下

            

           这时候zookeeper集群正常,使用quit退出登录

           


六、安装Hadoop搭建集群


          此时准备工作都已经结束,都正常之后便可建立集群

          1、解压:     tar -zxvf hadoop-2.7.3.tar.gz  

                            修改文件名为  hadoop

          2、配置环境变量: sudo vim /etc/profile 

                       新增以下内容:

                                export HADOOP_HOME=/home/lj/cdh/hadoop
                                export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native    

                      这条之前jdk配置时已经增加,所以这里进行修改

                                export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

                    修改完成之后刷新配置文件: source /etc/profile

                    检查hadoop版本: hadoop version 

                              

         3、修改配置文件:

                首先进入到hadoop/etc/hadoop 文件夹下 :  cd hadoop/etc/hadoop

                需要修改以下文件: 

core-site.xmlhdfs-site.xmlyarn-site.xmlmapred-site.xml
hadoop-env.shyarn-env.shslaves 

                

                     (1) 修改core-site.xml,内容如下

  1. <!--指定hdfs连接地址,集群模式(高可用)-->
  2. <property>
  3. <name>fs.defaultFS</name>
  4. <value>hdfs://cluster</value>
  5. </property>
  6. <!-- 指定ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点-->
  7. <property>
  8. <name>ha.zookeeper.quorum</name>
  9. <value>master:2181,slave1:2181,slave2:2181</value>
  10. </property>

                  (2)修改hdfs-site.xml

  1. <!--指定HDFS副本的数量,不能超过机器节点数-->
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>3</value>
  5. </property>
  6. <!-- 为namenode集群定义一个services name -->
  7. <property>
  8. <name>dfs.nameservices</name>
  9. <value>cluster</value>
  10. </property>
  11. <!-- nameservice 包含哪些namenode,为各个namenode起名 -->
  12. <property>
  13. <name>dfs.ha.namenodes.cluster</name>
  14. <value>nn01,nn02</value>
  15. </property>
  16. <!-- 名为nn01的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
  17. <property>
  18. <name>dfs.namenode.rpc-address.cluster.nn01</name>
  19. <value>master:9000</value>
  20. </property>
  21. <!--名为nn01的namenode的http地址和端口号,用来和web客户端通讯 -->
  22. <property>
  23. <name>dfs.namenode.http-address.cluster.nn01</name>
  24. <value>master:50070</value>
  25. </property>
  26. <!-- 名为nn02的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
  27. <property>
  28. <name>dfs.namenode.rpc-address.cluster.nn02</name>
  29. <value>slave1:9000</value>
  30. </property>
  31. <!--名为nn02的namenode的http地址和端口号,用来和web客户端通讯 -->
  32. <property>
  33. <name>dfs.namenode.http-address.cluster.nn02</name>
  34. <value>slave1:50070</value>
  35. </property>
  36. <!-- namenode间用于共享编辑日志的journal节点列表 -->
  37. <property>
  38. <name>dfs.namenode.shared.edits.dir</name>
  39. <value>qjournal://master:8485;slave1:8485;slave2:8485/cluster</value>
  40. </property>
  41. <!-- journalnode 上用于存放edits日志的目录 -->
  42. <property>
  43. <name>dfs.journalnode.edits.dir</name>
  44. <value>/home/lj/cdh/hadoop-2.7.3/tmp/journal</value>
  45. </property>
  46. <!-- 指定该集群出现故障时,是否自动切换到另一台namenode -->
  47. <property>
  48. <name>dfs.ha.automatic-failover.enabled.cluster</name>
  49. <value>true</value>
  50. </property>
  51. <!-- 配置失败自动切换实现方式 -->
  52. <property>
  53. <name>dfs.client.failover.proxy.provider.cluster</name>
  54. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  55. </property>
  56. <!-- 一旦需要NameNode切换,使用ssh方式进行操作 -->
  57. <property>
  58. <name>dfs.ha.fencing.methods</name>
  59. <value>sshfence(lj:9431)</value>
  60. </property>
  61. <!-- 如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置 -->
  62. <property>
  63. <name>dfs.ha.fencing.ssh.private-key-files</name>
  64. <value>/home/lj/.ssh/id_rsa</value>
  65. </property>
  66. <!-- connect-timeout超时时间 -->
  67. <property>
  68. <name>dfs.ha.fencing.ssh.connect-timeout</name>
  69. <value>30000</value>
  70. </property>
  71. <property>
  72. <name>dfs.name.dir</name>
  73. <value>/home/lj/cdh/hadoop-2.7.3/dfs/name</value>
  74. </property>
  75. <property>
  76. <name>dfs.data.dir</name>
  77. <value>/home/lj/cdh/hadoop-2.7.3/dfs/data</value>
  78. </property>

            (3)修改yarn-site.xml

  1. <!-- 启用Resource Manager HA高可用性 -->
  2. <property>
  3. <name>yarn.resourcemanager.ha.enabled</name>
  4. <value>true</value>
  5. </property>
  6. <!-- 指定resourcemanager的名字 -->
  7. <property>
  8. <name>yarn.resourcemanager.cluster-id</name>
  9. <value>yrc</value>
  10. </property>
  11. <!-- 使用了2个resourcemanager,分别指定Resourcemanager的地址 -->
  12. <property>
  13. <name>yarn.resourcemanager.ha.rm-ids</name>
  14. <value>rm1,rm2</value>
  15. </property>
  16. <!-- 指定rm1的地址 -->
  17. <property>
  18. <name>yarn.resourcemanager.hostname.rm1</name>
  19. <value>master</value>
  20. </property>
  21. <!-- 指定rm2的地址 -->
  22. <property>
  23. <name>yarn.resourcemanager.hostname.rm2</name>
  24. <value>slave1</value>
  25. </property>
  26. <!-- 指定zookeeper集群机器 -->
  27. <property>
  28. <name>yarn.resourcemanager.zk-address</name>
  29. <value>master:2181,slave1:2181,slave2:2181</value>
  30. </property>
  31. <!-- NodeManager上运行的附属服务,默认是mapreduce_shuffle -->
  32. <property>
  33. <name>yarn.nodemanager.aux-services</name>
  34. <value>mapreduce_shuffle</value>
  35. </property>

            (4)修改mapred-site.xml,注意 该文件不存在,需要手动创建,

                           cp mapred-site.xml.template mapred-site.xml

                     修改内容如下:

  1. <property>
  2. <name>mapreduce.framework.name</name>
  3. <value>yarn</value>
  4. <description>指定mapreduce使用yarn框架</description>
  5. </property>

           (5) 修改slaves文件,这里指定的是datanode节点,内容如下:

  1. master
  2. slave1
  3. slave2

            (6)修改hadoop-env.sh文件,指定jdk的地址

                  

          (7)修改yarn-env.sh文件,指定jdk的地址 

                 

     4、将文件发送到其余节点

                    scp  ./hadoop lj@slave1:/home/lj/cdh/

                    scp  ./hadoop lj@slave2:/home/lj/cdh/

     5、配置其余节点环境变量,与步骤2一致。

     6、启动hadoop

         注意:第一次启动需要以下内容顺序执行

       (1)启动journalnode,三台机器都要这一步操作(仅第一次启动hadoop时,需要这一步操作,之后不再需要手动启动journalnode)

  1. cd /usr/local/hadoop/sbin
  2. sh hadoop-daemon.sh start journalnode

       (2) 在master上执行格式化操作,格式化namenode和zkfc (在倒数几行可以看到formatted 即为成功)

  1. hdfs namenode -format
  2. hdfs zkfc -formatZK

    (3)在master上启动namenode  (在倒数几行可以看到formatted 即为成功)

hadoop-daemon.sh start namenode

    (4)namenode主从信息同步,在slave1节点上执行同步命令  (无报错)

hdfs namenode -bootstrapStandby

上述步骤完成后,接下来我们就可以启动hadoop了

启动命令

      master节点

  1. start-all.sh
  2. #启动ZookeeperFailoverController
  3. hadoop-daemon.sh start zkfc

      slave1节点

  1. yarn-daemon.sh start resourcemanager
  2. hadoop-daemon.sh start zkfc

停止命令

  1. #master
  2. /usr/local/hadoop/sbin/stop-all.sh
  3. /usr/local/hadoop/sbin/hadoop-daemon.sh stop zkfc
  4. #slave1
  5. /usr/local/hadoop/sbin/yarn-daemon.sh stop resourcemanager
  6. /usr/local/hadoop/sbin/hadoop-daemon.sh stop zkfc

      7、查看进程   jps

  1. #master
  2. 26849 NodeManager
  3. 2770 QuorumPeerMain
  4. 27331 DFSZKFailoverController
  5. 26308 DataNode
  6. 26537 JournalNode
  7. 26154 NameNode
  8. 26733 ResourceManager
  9. #slave1
  10. 7489 JournalNode
  11. 7281 NameNode
  12. 627 QuorumPeerMain
  13. 8233 DFSZKFailoverController
  14. 8123 ResourceManager
  15. 7389 DataNode
  16. 7631 NodeManager
  17. #slave2
  18. 21762 QuorumPeerMain
  19. 29476 NodeManager
  20. 29271 DataNode
  21. 29370 JournalNode

      8、通过页面检验

          打开火狐浏览器,输入master:50070 和slave1:50070,可以看到一个为active,一个为standby

             

              

       之后查看master:8088和slave1:8088,可以看到yarn页面

             

            此时便成功了。

    9、测试高可用

        这里需要kill掉活跃的namenode,之后查看页面是否转换成功。

        我这里转换没有成功,可以参照此文章:https://blog.csdn.net/weixin_42425970/article/details/103825812

  

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/873395
推荐阅读
相关标签
  

闽ICP备14008679号