非高可用集羣搭建可以參看我寫的博客
http://blog.csdn.net/wyl6019/article/details/52874779
1 體系架構圖
集羣節點分配情況
192.168.100.200 wangyl-0 Active NameNode
192.168.100.201 wangyl-1 Standby Namenode
192.168.100.202 wangyl-2 Active ResourceManager
192.168.100.203 wangyl-3 Standby ResourceManager
192.168.100.204 wangyl-4 DataNode、JournalNode、NodeManager
192.168.100.205 wangyl-5 DataNode、JournalNode、NodeManager
192.168.100.206 wangyl-6 DataNode、JournalNode、NodeManager
192.168.100.207 wangyl-7 Zookeeper
192.168.100.208 wangyl-8 Zookeeper
192.168.100.209 wangyl-9 Zookeeper
2 準備工作
配置每一個節點的/ect/hosts文件
配置SSH免密碼登陸
安裝JDK
3 HDFS HA 原理
fsimage:元數據的鏡像文件,可以認爲是元數據在保存在磁盤的一個副本;
edits:日記文件,記錄元數據變化操作;
NameNode:有兩種狀態,Active狀態爲激活狀態,對外提供服務,Standby狀態爲熱備,當Active宕機之後對外提供服務;
JournalNode:hadoop自帶的共享存儲系統,一個輕量級的進程;
ZKFC:Zookeeper的客戶端,在NameNode節點上作爲守護進程啓動;
主備NameNode數據實時同步流程:
當集羣啓動後,一個NameNode節點處於Active狀態,對外提供服務,並把editLog寫到本地和共享存儲系統(可以是JournalNode);另外一個NameNode處於Standby狀態,啓動的時候會去加載元數據的鏡像文件fsimage,並週期性去共享存儲系統中讀edits,保持與Active的NameNode狀態同步;爲了確保主備切換高效,DataNode需要同時向兩個NameNode彙報block to report信息,因爲主備切換最耗時的就是處理DataNode的report block;生產環境中爲了提高自動化切換,引入了Zookeeper集羣和ZKFC進程,ZKFC進程在每一個NameNode上都存在,ZKFC與Zookeeper通信,通過Zookeeper選主。
4 ResourceManager HA原理
ResourceManager的主備也是用過Zookeeper集羣實現,每一個ResourceManager節點存在一個ZKFC輕量級的守護進程,負責與Zookeeper集羣通信,當主RM宕機之後,迅速切換來實現HA;
5 具體搭建步驟
zookeeper集羣搭建省略
目錄規劃
hadoop安裝目錄 :/usr/local
hadoop臨時文件目錄:/usr/local/hadoop-2.7.1/tmp
journalNode存儲目錄:/usr/local/hadoop-2.7.1/journaldata
5.1 hadoop-env.xml文件
export JAVA_HOME=
修改爲你自己的${JAVA_HOME}
5.2 mapred-site.xml
配置yarn爲集羣的協調管理框架
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
配置 hadoop集羣的jobhistory
<property>
<name>mapreduce.jobhistory.address</name>
<value>wangyl-4:10020</value>
</property>
配置 hadoop集羣的jobhistory的webapp,可通過瀏覽器訪問
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>wangyl-4:19888</value>
</property>
5.3 yarn-site.xml
開啓MR HA
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
指定RM集羣的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>wangyl-2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>wangyl-3</value>
</property>
<property>
指定失效自動切換
<property><property>
指定zookeeper集羣地址
<property>
5.4 core-site.xml
指定HDFS的名稱空間爲ns1,ns1爲邏輯概念,與hdfs-site.xml中一致即可
<property>
指定hadoop的臨時存儲文件
<property>
指定Zookeeper集羣地址
<property>
5.5 hdfs-site.xml
指定HDFS的名稱空間爲ns1,ns1爲邏輯概念,與core-site.xml中一致即可
<property>
HDFS的名稱空間爲ns1下面有兩個NameNode,作爲HA
<property>
指定wangyl-0的RPC通信地址
<property>
指定wangyl-0的HTTP通信地址,可通過web瀏覽器查看
<property>
指定wangyl-1的RPC通信地址
<property>
指定wangyl-1的HTTP通信地址,可通過web瀏覽器查看
<property>
指定Namenode的元數據在JournalNode上的存放路徑
<property>
指定JournalNode在本地存儲位置
<property>
開啓NameNode失敗自動切換
<property>
配置失敗自動切換方案
<property>
配置隔離機制方式,即主宕機之後,從通過什麼方式殺死主NameNode進程,防止腦裂
<property>
sshfencing
shell(bin/true)
</value>
使用ssh隔離機制需要配置免密碼登陸文件位置
<property>
配置ssh隔離機制超時時間
<property>
5.5 slaves文件
NameNode的指定的是DataNode節點,ResourceManager指定的是NodeManager節點
wangyl-4
wangyl-5
wangyl-6
至此,將配置好的hadoop拷貝到其它節點上
6 啓動
6.1 啓動Zookeeper集羣
在wangyl-7,wangyl-8,wangyl-9三個節點上
./zkServer.sh start
6.2 啓動JournalNode
在wangyl-4,wangyl-5,wangyl-6三個節點上
sbin/hadoop-daemon.sh start journalnode
6.3 格式化HDFS(只在第一次啓動的時候)
在wangyl-0節點上
hdfs namenode -format
執行成功之後會在core-site.xml配置的hadoop.tmp.dir路徑下生成文件,我的是/usr/local/hadoop-2.7.1/tmp,將/usr/local/hadoop-2.7.1/tmp拷貝到wangyl-1下
6.4 格式化ZKFC
在wangyl-0節點上
hdfs zkfc -formatZK
6.5 啓動HDFS
在wangyl-0節點上
sbin/start-dfs.sh
6.6 啓動ResourceManager
在wangyl-2節點上
sbin/start-yarn.sh
在wangyl-3節點上
sbin/yarn-daemon.sh start resourcemanager