二十三、HadoopHA环境搭建(保姆篇,手把手搭建)

举报
托马斯-酷涛 发表于 2022/05/26 00:42:08 2022/05/26
【摘要】 HDFS-HA集群配置 环境准备: 1.    将各个机器修改为静态IP,见主页第十四篇文章:Linux设置静态IP及Ping通百度 2.    修改主机名及主机名和IP地址的映射,见主页第十一篇文章:修改主机名,IP映射 3.    关闭防火墙,见...

HDFS-HA集群配置

环境准备:

1.    将各个机器修改为静态IP,见主页第十四篇文章:Linux设置静态IP及Ping通百度

2.    修改主机名及主机名和IP地址的映射,见主页第十一篇文章:修改主机名,IP映射

3.    关闭防火墙,见主页第九篇文章:永久关闭防火墙

4.    ssh免密登录,见主页第九篇文章:同上

5.    安装JDK,配置环境变量等,见主页第九篇文章:同上

规划集群:

hadoopha101

hadoopha102 hadoopha103

NameNode     

NameNode

JournalNode   

JournalNode   

JournalNode   

DataNode

DataNode

DataNode

ZK  

ZK  

ZK  

ResourceManager

NodeManager

NodeManager

NodeManager

部署集群

1.    集群规划

在hadoopha101、hadoopha102和hadoopha103三个节点上部署Zookeeper。

2.    解压安装

(1)解压Zookeeper安装包到/home/目录下。

(2)重命名apache-zookeeper-3.5.7-bin.tar.gz 为zookeeper。 

 

(3)在zookeeper-3.5.7/安装目录下创建zkData。

(4)重命名/home/zookeeper/conf这个目录下的zoo_sample.cfg为zoo.cfg。

 

 3.    配置zoo.cfg文件

 (1)具体配置,修改dataDir为真实路径,添加红框中的内容。

(2)配置参数解读

Server.A=B:C:D。

        A是一个数字,表示这个是第几号服务器;

        B是这个服务器的IP地址;

        C是这个服务器与集群中的Leader服务器交换信息的端口;

       D是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

        集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。

 4.    集群操作

 (1)在/home/zookeeper/zkData目录下创建一个myid的文件。

 (2)编辑myid文件。

 在文件中添加与server对应的编号:如1

(3)拷贝配置好的zookeeper发到其他机器上。

 并分别修改myid文件中内容为2、3

(4)分别启动zookeeper。

 

 

(5)查看状态。

 

 

 配置HDFS-HA集群

 (1)在opt目录下创建一个ha文件夹。

 (2)将/home/hadoop/下的 hadoop目录拷贝到/opt/ha目录下。

 (3)配置hadoop-env.sh。

 (4)配置core-site.xml。


  
  1. <configuration>
  2. <property>
  3. <name>fs.defaultFS</name>
  4. <value>hdfs://mycluster</value>
  5. </property>
  6. <property>
  7. <name>hadoop.tmp.dir</name>
  8. <value>/opt/ha/hadoop/data/tmp</value>
  9. </property>
  10. <property>
  11. <name>dfs.journalnode.edits.dir</name>
  12. <value>/opt/ha/hadoop/data/tmp/jn</value>
  13. </property>
  14. </configuration>

(5)配置hdfs-site.xml。


  
  1. <configuration>
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>1</value>
  5. </property>
  6. <!-- 完全分布式集群名称 -->
  7. <property>
  8. <name>dfs.nameservices</name>
  9. <value>mycluster</value>
  10. </property>
  11. <!-- 集群中NameNode节点都有哪些 -->
  12. <property>
  13. <name>dfs.ha.namenodes.mycluster</name>
  14. <value>nn1,nn2</value>
  15. </property>
  16. <!-- nn1的RPC通信地址 -->
  17. <property>
  18. <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  19. <value>hadoopha101:9000</value>
  20. </property>
  21. <!-- nn2的RPC通信地址 -->
  22. <property>
  23. <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  24. <value>hadoopha102:9000</value>
  25. </property>
  26. <!-- nn1的http通信地址 -->
  27. <property>
  28. <name>dfs.namenode.http-address.mycluster.nn1</name>
  29. <value>hadoopha101:50070</value>
  30. </property>
  31. <!-- nn2的http通信地址 -->
  32. <property>
  33. <name>dfs.namenode.http-address.mycluster.nn2</name>
  34. <value>hadoopha102:50070</value>
  35. </property>
  36. <!-- 指定NameNode元数据在JournalNode上的存放位置 -->
  37. <property>
  38. <name>dfs.namenode.shared.edits.dir</name>
  39. <value>qjournal://hadoopha101:8485;hadoopha102:8485;hadoopha103:8485/mycluster</value>
  40. </property>
  41. <!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
  42. <property>
  43. <name>dfs.ha.fencing.methods</name>
  44. <value>sshfence</value>
  45. </property>
  46. <!-- 关闭权限检查-->
  47. <property>
  48. <name>dfs.permissions.enable</name>
  49. <value>false</value>
  50. </property>
  51. <!-- 使用隔离机制时需要ssh无秘钥登录-->
  52. <property>
  53. <name>dfs.ha.fencing.ssh.private-key-files</name>
  54. <value>/root/.ssh/id_rsa</value>
  55. </property>
  56. <!-- 访问代理类:client,mycluster,active配置失败自动切换实现方式-->
  57. <property>
  58. <name>dfs.client.failover.proxy.provider.mycluster</name>
  59. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  60. </property>
  61. </configuration>

(6)在其他两台机器上创建 /opt/下的ha目录,将用于分发。

(7)将配置好的hadoop环境分发到其他节点。

 5 .   启动HDFS-HA集群

 1.    在各个JournalNode节点上(/opt/ha/hadoop),输入以下命令启动journalnode服务。

 

 2.    对其hadoopha101进行格式化。 

 如图所示:0即为格式化无误,1请查看配置文件是否出错。

 3.     启动第一台机器的namenode。

 4.        使用jps命令查看节点。

5.      在hadoopha102机器上同步第一台机器的元数据信息。

        有两种方式同步:   1.在hadoopha102上使用如下图命令

                                        2.将hadoopha101机器上的tmp目录拷贝到hadoopha102机器上。

 

6.       启动第二台机器的namenode。 

7.       使用“hadoopha101:50070”命令在虚拟机浏览器查看web页面显示。 

6.    在第一台机器上,启动所有datanode。

 注意:1.开启datanode之前此处slaves文件要确保修改为主机名,且不能有多余空格。

            2.ssh配置完成。如未配置请移步:Hadoop完全分布式的搭建详情修改slaves文件配置ssh免密

 7.    将第一台机器切换为Active。

8.    查看是否Active。 

6    配置HDFS-HA自动故障转移

1.    具体配置

(1)在hdfs-site.xml中增加。


  
  1. <property>
  2. <name>dfs.ha.automatic-failover.enabled</name>
  3. <value>true</value>
  4. </property>

(2)在core-site.xml文件中增加。


  
  1. <property>
  2. <name>ha.zookeeper.quorum</name>
  3. <value>hadoopha101:2181,hadoopha102:2181,hadoopha103:2181</value>
  4. </property>

2.    启动

(1)关闭所有HDFS服务:

 (2)启动Zookeeper集群:

 (3)初始化HA在Zookeeper中状态(此处格式化只格式化一次):

 (4)启动HDFS服务:

 (5)在各个NameNode节点上启动DFSZK Failover Controller,先在哪台机器启动,哪个机器的NameNode就是Active NameNode。

 可以看到未切换前第一台机器为active,第二台机器为standby。

注意:如果发现第二台机器DFSZKFailoverController节点没有起来。则:

 (1)先停止所有dfs节点。sbin/stop-dfs.sh

 (2)分发/opt/ha/hadoop/etc/hadoop给第二三台机器。

          scp -r /opt/ha/hadoop/etc/hadoop/ hadoopha102:/opt/ha/hadoop/etc/hadoop/

          scp -r /opt/ha/hadoop/etc/hadoop/ hadoopha103:/opt/ha/hadoop/etc/hadoop/
 (3)再启动所有dfs节点。sbin/start-dfs.sh

(6)如图节点就都没问题了。

 (7)验证

        现机器状态如第五步所示。

1、将Active NameNode进程kill。

 2、查看是否进行了故障转移。

 

         注意:可见第一台机器由于进程namenode被杀死直接网页找不到了,而同时第二台机器变为了active状态,这样就实现了自动故障转移,一旦active机器死机,自动故障转移就会将其他namenode机器变为active状态,实现自动故障转移。

YARN-HA配置 

YARN-HA工作机制如图:

配置YARN-HA集群: 

1.    环境准备(雷同以上hdfs配置)

(1)修改IP

(2)修改主机名及主机名和IP地址的映射

(3)关闭防火墙

(4)ssh免密登录

(5)安装JDK,配置环境变量

(6)配置Zookeeper集群

 2.    规划集群

hadoop102

hadoop103 

hadoop104

NameNode     

NameNode

JournalNode   

JournalNode   

JournalNode       

DataNode

DataNode

DataNode

ZK

ZK

ZK

ResourceManager       

ResourceManager       

NodeManager

NodeManager

NodeManager       

 3.    具体配置

(1)yarn-site.xml配置        


  
  1. <configuration>
  2. <property>
  3. <name>yarn.nodemanager.aux-services</name>
  4. <value>mapreduce_shuffle</value>
  5. </property>
  6. <!--启用resourcemanager ha-->
  7. <property>
  8. <name>yarn.resourcemanager.ha.enabled</name>
  9. <value>true</value>
  10. </property>
  11. <!--声明两台resourcemanager的地址-->
  12. <property>
  13. <name>yarn.resourcemanager.cluster-id</name>
  14. <value>cluster-yarn1</value>
  15. </property>
  16. <property>
  17. <name>yarn.resourcemanager.ha.rm-ids</name>
  18. <value>rm1,rm2</value>
  19. </property>
  20. <property>
  21. <name>yarn.resourcemanager.hostname.rm1</name>
  22. <value>hadoopha101</value>
  23. </property>
  24. <property>
  25. <name>yarn.resourcemanager.hostname.rm2</name>
  26. <value>hadoopha102</value>
  27. </property>
  28. <!--指定zookeeper集群的地址-->
  29. <property>
  30. <name>yarn.resourcemanager.zk-address</name>
  31. <value>hadoopha101:2181,hadoopha102:2181,hadoopha103:2181</value>
  32. </property>
  33. <!--启用自动恢复-->
  34. <property>
  35. <name>yarn.resourcemanager.recovery.enabled</name>
  36. <value>true</value>
  37. </property>
  38. <!--指定resourcemanager的状态信息存储在zookeeper集群-->
  39. <property>
  40. <name>yarn.resourcemanager.store.class</name>
  41. <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
  42. </property>
  43. </configuration>

(2)同步更新其他节点的配置信息

 

 4.   启动hdfs

(1)在各个JournalNode节点上,输入以下命令启动journalnode服务:

sbin/hadoop-daemon.sh start journalnode
 

(2)在[nn1]上,对其进行格式化,并启动(如果hdfsha初始化过就不需要再次初始化了):


  
  1. bin/hdfs namenode -format
  2. sbin/hadoop-daemon.sh start namenode

(3)在[nn2]上,同步nn1的元数据信息:

bin/hdfs namenode -bootstrapStandby
 

(4)启动[nn2]:

sbin/hadoop-daemon.sh start namenode
 

(5)启动所有DataNode

sbin/hadoop-daemons.sh start datanode
 

5.   启动YARN

1)在hadoopha101中执行:

sbin/start-yarn.sh
 

2)在hadoopha102中执行:

sbin/yarn-daemon.sh start resourcemanager
 

3)查看服务状态,如图所示

 

         注意:yarnha和hdfsha有一些不同,hdfs使用群起命令都可以直接起来,而在yarn中使用群起命令不会全部机器都起来,需要手动启动,例如第二步单独启动第二台机器resourcemanager。yarn中能打开上图网页即为活跃状态。

至此,HadoopHA搭建完毕。

见我的其他博客:

Hadoop伪分布式的搭建详情

Hadoop完全分布式的搭建详情

Zookeeper (leader)选举机制

Zookeeper集群的搭建(单机、伪分布式、集群)

Spark的安装与部署详情(Local模式,Standalone模式,Spank on YARN模式)

HadoopHA工作机制(高可用)

文章来源: tuomasi.blog.csdn.net,作者:托马斯-酷涛,版权归原作者所有,如需转载,请联系作者。

原文链接:tuomasi.blog.csdn.net/article/details/119838463

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。