一、准备工作
1.把集群全部停掉
在三台节点上都做(在xshell通过右键----> 发送输入到--->所有会话)
2..在/export/servers下创建HA目录
sudo mkdir -p /export/servers/HA
3.创建用户和设置所属主和所属组
#创建用户
sudo adduser ygre
#设置密码
sudo passwd ygre
# 创建用户组
sudo chown ygre:ygre HA
4.将原hadoop拷贝到/export/servers/HA下(在hadoop1上即可--后面会分发)
cp -r /export/servers/hadoop /export/servers/HA
5.将/export/servers/HA下的hadoop里面的data logs 和/tmp/* 全部删除
rm -rf data logs
sudo rm -rf /tmp/*
6.配置环境变量(将指向/export/servers/hadoop 修改成指向/export/servers/HA/hadoop)
sudo vi /etc/profile
# 修改
export HADOOP_HOME=/export/servers/HA/hadoop
# 保存退出
:wq
#初始化环境变量
source /etc/profile
7.分发环境变量
#将系统环境变量文件分发至虚拟机Hadoop2的/etc目录
scp /etc/profile root@hadoop2:/etc
#将系统环境变量文件分发至虚拟机Hadoop3的/etc目录
scp /etc/profile root@hadoop3:/etc
# 分别在hadoop2和hadoop3中初始化环境变量
source /etc/profile
# 每台节点一定要验证
echo $HADOOP_HOME
二、配置HDFS
1.配置core-site.xml
<configuration><!-- 默认文件系统地址(HA 集群逻辑名称) --><property><name>fs.defaultFS</name><value>hdfs://mycluster</value></property><!-- Hadoop 临时目录 --><property><name>hadoop.tmp.dir</name><value>/export/servers/HA/hadoop/data</value></property><!-- ZooKeeper 集群地址 --><property><name>ha.zookeeper.quorum</name><value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value></property><!-- 启用自动故障转移 --><property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property><!-- ZKFC 会话超时时间 --><property><name>ha.zookeeper.session-timeout.ms</name><value>5000</value></property>
</configuration>
2. 配置hdfs-site.xml
注意:在hadoop2.x中只能有两个NameNode,但是在hadoop3.x中可以有无限个
<configuration><!-- NameNode数据存储目录 --><property><name>dfs.namenode.name.dir</name><value>file://${hadoop.tmp.dir}/name</value></property><!-- DataNode数据存储目录 --><property><name>dfs.datanode.data.dir</name><value>file://${hadoop.tmp.dir}/data</value></property><!-- JournalNode数据存储目录 --><property><name>dfs.journalnode.edits.dir</name><value>${hadoop.tmp.dir}/jn</value></property><!-- 完全分布式集群名称 --><property><name>dfs.nameservices</name><value>mycluster</value></property><!-- 集群中NameNode节点都有哪些 --><property><name>dfs.ha.namenodes.mycluster</name><value>nn1,nn2</value></property><!-- NameNode的RPC通信地址 --><property><name>dfs.namenode.rpc-address.mycluster.nn1</name><value>hadoop1:8020</value></property><property><name>dfs.namenode.rpc-address.mycluster.nn2</name><value>hadoop2:8020</value></property><!-- NameNode的http通信地址 --><property><name>dfs.namenode.http-address.mycluster.nn1</name><value>hadoop1:50070</value></property><property><name>dfs.namenode.http-address.mycluster.nn2</name><value>hadoop2:50070</value></property><property><name>dfs.namenode.http-address.mycluster.nn3</name><value>hadoop3:50070</value></property><!-- 指定NameNode元数据在JournalNode上的存放位置 --><property><name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/mycluster</value></property><!-- 访问代理类:client用于确定哪个NameNode为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/ygre/.ssh/id_rsa</value></property><property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property>
</configuration>
三、配置YARN
1.配置yarn-site.xml
<configuration><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><!--指定resourcemanager的逻辑列表--><property><name>yarn.resourcemanager.ha.rm-ids</name><value>rm1,rm2,rm3</value></property>
<!-- ========== rm1的配置 ========== --><!-- 指定rm1的主机名 --><property><name>yarn.resourcemanager.hostname.rm1</name><value>hadoop1</value></property><!-- 指定rm1的web端地址 --><property><name>yarn.resourcemanager.webapp.address.rm1</name><value>hadoop1:8088</value></property><!-- 指定rm1的内部通信地址 --><property><name>yarn.resourcemanager.address.rm1</name><value>hadoop1:8032</value></property><!-- 指定AM向rm1申请资源的地址 --><property><name>yarn.resourcemanager.scheduler.address.rm1</name> <value>hadoop1:8030</value></property><!-- 指定供NM连接的地址 --> <property><name>yarn.resourcemanager.resource-tracker.address.rm1</name><value>hadoop1:8031</value></property><!-- ========== rm2的配置 ========== --><!-- 指定rm2的主机名 --><property><name>yarn.resourcemanager.hostname.rm2</name><value>hadoop2</value></property><property><name>yarn.resourcemanager.webapp.address.rm2</name><value>hadoop2:8088</value></property><property><name>yarn.resourcemanager.address.rm2</name><value>hadoop2:8032</value></property><property><name>yarn.resourcemanager.scheduler.address.rm2</name><value>hadoop2:8030</value></property><property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name><value>hadoop2:8031</value></property><!-- ========== rm3的配置 ========== --><!-- 指定rm1的主机名 --><property><name>yarn.resourcemanager.hostname.rm3</name><value>hadoop3</value></property><!-- 指定rm1的web端地址 --><property><name>yarn.resourcemanager.webapp.address.rm3</name><value>hadoop3:8088</value></property><!-- 指定rm1的内部通信地址 --><property><name>yarn.resourcemanager.address.rm3</name><value>hadoop3:8032</value></property><!-- 指定AM向rm1申请资源的地址 --><property><name>yarn.resourcemanager.scheduler.address.rm3</name> <value>hadoop3:8030</value></property><!-- 指定供NM连接的地址 --> <property><name>yarn.resourcemanager.resource-tracker.address.rm3</name><value>hadoop3:8031</value></property><!-- 指定zookeeper集群的地址 --> <property><name>yarn.resourcemanager.zk-address</name><value>hadoop1:2181,hadoop2:2181,hadoop3: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><!-- 环境变量的继承 --><property><name>yarn.nodemanager.env-whitelist</name><value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value></property>
</configuration>
四、运行HA高可用集群和查看WebUI
1.分发HA中的hadoop安装目录
#将Hadoop安装目录分发至虚拟机HA中的hadoop2中存放安装程序的目录
scp -r /export/servers/HA/hadoop root@hadoop2:/export/servers/HA
#将Hadoop安装目录分发至虚拟机HA中的hadoop3中存放安装程序的目录
scp -r /export/servers/HA/hadoop root@hadoop3:/export/servers/HA
2.在(hadoop1,hadoop2,hadoop3)启动journalnode
hdfs start journalnode
3.在[hadoop1]上,对其进行格式化
hdfs namenode -format
4.在hadoop2上同步元数据
hdfs namenode -bootstrapStandby
5.启动Zookeeper
# 启动zookeeper
/export/servers/zookeeper/bin/zhServer.sh start
# 验证集群状态
/export/servers/zookeeper/bin/zhServer.sh status
输出Mode:leader或Mode:follwer 表示集群正常运行
6.启动HDFS服务和启动YARN服务
# 启动hdfs服务
start-dfs.sh
# 启动yarn服务
start-yarn.sh
7.验证
jps
五、恢复到原来Hadoop集群
1.关闭所有服务
2.修改环境变量
sudo vi /etc/profile
# 修改
export HADOOP_HOME=/export/servers/hadoop
# 保存退出:
:wq
#初始化环境变量
source /etc/profile
3.分发环境变量
#将系统环境变量文件分发至虚拟机Hadoop2的/etc目录
scp /etc/profile root@hadoop2:/etc
#将系统环境变量文件分发至虚拟机Hadoop3的/etc目录
scp /etc/profile root@hadoop3:/etc
# 分别在hadoop2和hadoop3中初始化环境变量
source /etc/profile
# 每台节点一定要验证
echo $HADOOP_HOME
3.每台节点都需要删除/tmp/*
sudo rm -rf /tmp/*
4.启动原集群:
start-all.sh