1、环境准备
1.1、需要配置好Hadooop集群配置的服务
配置可以查看我的另一篇文章 点击查看
1.2、准备工作
- 1、在/opt下创建ha目录(三台节点) 在三台机器上都创建ha目录
ssh jubull@hadoop102
sudo mkdir /opt/ha
ssh jubull@hadoop103
sudo mkdir /opt/ha
ssh jubull@hadoop104
sudo mkdir /opt/ha
- 2、修改/opt/ha的所属主和所属组(三台节点)
sudo chown jubull:jubull /opt/ha
- 3、把所有服务都关闭了
hdfs --daemon stop namenode
- 4、将/opt/module下的hadoop拷贝到/opt/ha下(在hadoop102)
cp -r /opt/module/hadoop-3.1.3/data /opt/ha/hadoop-3.1.3/logs
sudo rm -rf /tmp/*
- 5、将/opt/ha/hadoop-3.1.3中的data和logs全删除掉,将/tmp下的内容全部删掉
rm -rf /opt/ha/hadoop-3.1.3/data /opt/ha/hadoop-3.1.3/logs
sudo rm -rf /tmp/*
- 6、将/opt/ha/hadoop-3.1.3分发到其它节点
sxync /opt/ha/hadoop-3.1.3
- 7、将环境变量中的HADOOP_HOME修改成ha下的hadoop (三台节点)
export HADOOP_HOME=/opt/ha/hadoop-3.1.3
- 8 source每台节点的/etc/profile.d/my_env.sh (三台节点)
source /etc/profile.d/my_env.sh
echo $HADOOP_HOME
2、配置Zookeeper
配置可以查看我Zookeeper的集群文章 点击我
3、配置HDFS-HA集群
- 1、配置core-site.xml文件,将以下配置代码放入标签中(注意需要清空之前的配置代码块)
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.data.dir</name>
<value>/opt/ha/hadoop-3.1.3/data</value>
</property>
- 2、配置hdfs-site.xml文件,将以下配置代码放入标签中(注意需要清空之前的配置代码块)
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.data.dir}/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.data.dir}/data</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2,nn3</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>hadoop102:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>hadoop103:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn3</name>
<value>hadoop104:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>hadoop102:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>hadoop103:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn3</name>
<value>hadoop104:9870</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop102:8485;hadoop103:8485;hadoop104:8485/mycluster</value>
</property>
<!-- 访问代理类,client用于确定哪个NN为Active -->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配制隔离机制,即同一时刻只能有一台服务器对外响应 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用隔离机制时需要ssh无密登录 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/jubull/.ssh/id_rsa</value>
</property>
<!-- 指定NN的元数据在JournalNode的哪个位置存放 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>${hadoop.data.dir}/jn</value>
</property>
- 3、配置完成之后分发
xsync core-site.xml hdfs-site.xml
- 4、在三台节点上(hadoop102,hadoop103,hadoop104)启动
hdfs --daemon start journalnode
- 5、在hadoop102上执行格式式操作
hdfs anmenode -formt
- 6、 在hadoop102上启动namenode
hdfs --daemon start namenode
- 7、在hadoop103和hadoop104上同步元数据
hdfs namenode -bootstrapStandby
- 8、在hadoop103和hadoop104上启动namenode
hdfs --daemon start namenode
- 9、将hadoop102切换成active
hdfs haadmin -transitionToActive nn1
- 10、查看是否Active(或者WEB页面查看hadoop102:9870,hadoop103:9870,hadoop104:9870)
hdfs haadmin -getServiceState nn1
4、配置HDFS-HA自动故障转移
- 1、在hdfs-site.xml标签之中追加如下配置信息
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
- 2、在core-site.xml文件中增加
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
</property>
- 3、分发修改的配置文件
cd /opt/ha/hadoop-3.1.3
xsync core-site.xml hdfs-site.xml
- 4、关闭所有HDFS服务:
stop-dfs.sh
- 5、启动Zookeeper集群
zkCluster.sh start
- 6、初始化HA在Zookeeper中状态:为了在zookeeper创建节点
hdfs zkfc -formatZK
- 7、启动HDFS服务
start-dfs.sh
- 8 、尝试将active的那台节点的namenode停掉。查看其它节点
hdfs --daemon stop namenode
5、YARN-HA配置
- 1、在yarn-site.xml标签之中追加如下配置信息
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--启用resourcemanager ha-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!--声明两台resourcemanager的地址-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster-yarn1</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2,rm3</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop102</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop103</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm3</name>
<value>hadoop104</value>
</property>
<!--指定zookeeper集群的地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop102:2181,hadoop103:2181,hadoop104:2181</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>
- 2、分发文件
cd /opt/ha/hadoop-3.1.3
xsync yarn-site.xml
- 3、启动yarn(在任意一台都可以因为三台都有resourceManager)
start-yrn.sh
- 4、查看状态
yarn rmadmin -getServiceState rm1
- 5、将hadoop102的resourceManager停掉-再看其它的节点的状态
yarn --daemon stop resourcemanager