一、準備工作
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
?
?
?
?
?
?
?