2021
11/22
19:59
你的位置:首页 > 数据库 > 七,Hadoop3.3.1 HA 高可用集群QJM (基于Zookeeper,NameNode高可用+Yarn高可用)

七,Hadoop3.3.1 HA 高可用集群QJM (基于Zookeeper,NameNode高可用+Yarn高可用)

发布时间:2021-11-22 19:59:41

原标题:七,Hadoop3.3.1 HA 高可用集群QJM (基于Zookeeper,NameNode高可用+Yarn高可用)

目录
  • 前文
  • Hadoop3.3.1 HA 高可用集群的搭建
  • QJM 的 NameNode HA
  • Hadoop HA模式搭建(高可用)
    • 1,集群规划
    • 2,Zookeeper集群搭建:
    • 3,修改Hadoop集群配置文件
      • 修改 vim core-site.
      • 修改 hadoop-env.sh
      • 修改 hdfs-site.
      • workers
  • Yarn高可用
    • 修改 mapred-site.
    • 修改 yarn-site.
  • 启动zookeeper集群
    • 在每台机器上启动:
    • 格式化namenode,zkfc
    • 启动hdfs
    • 尝试HA模式
    • 此时再次查看节点

前文

  • 一,CentOS7 hadoop3.3.1安装(单机分布式,伪分布式,分布式
  • 二,JAVA API实现HDFS
  • 三,MapReduce编程实例
  • 四,Zookeeper3.7安装
  • 五,Zookeeper的Shell操作
  • 六,Java API操作zookeeper节点

Hadoop3.3.1 HA 高可用集群的搭建

(基于Zookeeper,NameNode高可用+Yarn高可用)

QJM 的 NameNode HA

用Quorum Journal Manager或常规共享存储
QJM的NameNode HA

Hadoop HA模式搭建(高可用)

1,集群规划

一共三台虚拟机,分别为master,worker1,worker2;

namenode三台上都有,resourcemanager在worker1,woker2上。

masterwoker1worker2
NameNodeyesyesyes
DataNodenoyesyes
JournalNodeyesyesyes
NodeManagernoyesyes
ResourceManagernoyesyes
Zookeeperyesyesyes
ZKFCyesyesyes

因为没有重新创建虚拟机,是在原本的基础上修改。所以名称还是hadoop1,hadoop2,hadoop3

hadoop1 = master

hadoop2 = worker1

hadoop3 = worker2

2,Zookeeper集群搭建:

参考:四,Zookeeper3.7安装

3,修改Hadoop集群配置文件

修改 hadoop-env.sh

vim hadoop-env.sh

hadoop-env.sh

在使用集群管理脚本的时候,由于使用ssh进行远程登录时不会读取/etc/profile文件中的环境变量配置,所以使用ssh的时候java命令不会生效,因此需要在配置文件中显式配置jdk的绝对路径(如果各个节点的jdk路径不一样的话那hadoop-env.sh中应改成本机的JAVA_HOME)。
hadoop 3.x中对角色权限进行了严格限制,相比于hadoop 2.x要额外对角色的所属用户进行规定。
此处仅为搭建HDFS集群,如果涉及到YARN等内容的话应一并修改对应yarn-env.sh等文件中的配置
在脚本末尾添加以下内容:

export JAVA_HOME=/opt/jdk1.8.0_241export HDFS_NAMENODE_USER="root"export HDFS_DATANODE_USER="root"export HDFS_ZKFC_USER="root"export HDFS_JOURNALNODE_USER="root"

workers

在hadoop 2.x中这个文件叫slaves,配置所有datanode的主机地址,只需要把所有的datanode主机名填进去就好了

hadoop1hadoop2hadoop3

Yarn高可用

vim mapred-site.

<configuration> <!-- 开启RM高可用 --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 指定RM的cluster id --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yrc</value> </property> <!-- 指定RM的名字 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 分别指定RM的地址 --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>hadoop2</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>hadoop3</value> </property> <!-- 指定zk集群地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>hadoop1:2181,hadoop2:2181,hadoop2:2181</value> </property><!--Reducer获取数据的方式--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property><!--日志聚集功能开启--> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property><!--日志保留时间设置1天--> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>86400</value> </property> <!-- 启用自动恢复 --> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <!-- 制定resourcemanager的状态信息存储在zookeeper集群上 --> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property></configuration>

都修改好了,就分发给其他集群节点
(在hadoop/etc路径下)
scp /export/servers/hadoop-3.3.1/etc/hadoop/* hadoop2:/export/servers/hadoop-3.3.1/etc/hadoop/

scp /export/servers/hadoop-3.3.1/etc/hadoop/* hadoop3:/export/servers/hadoop-3.3.1/etc/hadoop/

启动zookeeper集群

在每台机器上启动:

zkServer.sh startzkServer.sh status

格式化namenode,zkfc

首先,在所有虚拟机上启动journalnode:

hdfs --daemon start journalnode

都启动完毕之后,在master(hadoop1)节点上,格式化namenode

hadoop namenode -format

因为之前搭建过完全分布式,所以格式化一次namenode

但是,集群中的datanode,namenode与/current/VERSION/中的CuluserID有关

所以再次格式化,并启动,其他两个节点同步格式化好的namenode并不冲突

formatZK同理

然后单独启动namenode:

hdfs namenode

然后,在另外两台机器上,同步格式化好的namenode:

hdfs namenode -bootstrapStandby

应该能从master上看到传输信息。

传输完成后,在master节点上,格式化zkfc:

hdfs zkfc -formatZK

启动hdfs

在master节点上,先启动dfs:

start-dfs.sh

然后启动yarn:

start-yarn.sh

启动mapreduce任务历史服务器:

mapred --daemon start historyserver

可以看到各个节点的进程启动情况:


如果datanode未启动
是版本号不一致产生的问题,那么我们就单独解决版本号的问题,将你格式化之后的NameNode的VERSION文件找到,然后将里面的clusterID进行复制,再找到DataNode的VERSION文件,将里面的clusterID进行替换,保存之后重启

尝试HA模式

首先看看各个namenode主机状态:

hdfs haadmin -getServiceState nn1hdfs haadmin -getServiceState nn2hdfs haadmin -getServiceState nn3

可以看到,有两个standby,一个active。

在active的master节点上,kill掉namenode进程:

此时再次查看节点

可以看到,nn1已经切换为active,Hadoop 高可用集群基本搭建完成。


本文来自博客园,作者:李好秀,转载请注明原文链接:




原标题:七,Hadoop3.3.1 HA 高可用集群QJM (基于Zookeeper,NameNode高可用+Yarn高可用)

关键词:Centos

转载请保留本文网址: http://www.www.d5897.com/a/1266406.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#www.d5897.com (#换成@)。
Baidu