hdfs&&yarn HA 詳解

在這裏插入圖片描述
HA進程: 3臺機器
hadoop001:ZK NN ZKFC JN DN

hadoop002:ZK NN ZKFC JN DN

hadoop003:ZK JN DN

ZK集羣2n+1個。
根據經驗值,20臺節點佈置5臺zk,20~100佈置7/9/11臺,>100檯布置11臺。
各角色功能介紹:
NameNode:集羣當中的主節點,主要用於管理集羣當中的各種數據,一般都是使用兩個,實現HA高可用。
ACTIVE NN: 操作記錄寫到自己的editlog,同時寫JN集羣, 接收DN的心跳和塊報告。
STANDBY NN: 同時接收JN集羣的日誌,顯示讀取執行log操作(重演), 使得自己的元數據和active nn節點保持一致。接收DN的心跳和塊報告
JournalNode:元數據信息管理進程,一般都是2n+1個,同步元數據,通過JN共享狀態。(當記錄成功寫入集羣中的大數節點時,才認爲成功。就是說寫入成功的節點數>n+1/2)
DataNode:從節點,用於數據的存儲,同時向NN1 NN2發送心跳和塊報告。
ZKFC(zookeeperfailovercontrol):單獨的進程,監控NN監控健康狀態,向zk集羣定期發送心跳,使得自己可以被選舉;當自己被zk選舉爲active的時候,zkfc進程通過RPC協議調用使NN節點的狀態變爲active,對外提供實時服務,是無感知的。


YARN HA

hadoop001:zk rm(zkfc) nm
hadoop002:zk rm(zkfc) nm
hadoop003:zk nm

ZKFC: 線程
只作爲RM進程的一個線程而非獨立的進程存在

RMStateStore:
存儲在zk的/rmstore目錄下。
1.activeRM會向這個目錄寫APP信息
2.當activeRM掛了,另外一個standby RM通過
ZKFC選舉成功爲active,會從/rmstore讀取相應的作業信息。
重新構建作業的內存信息,啓動內部的服務,
開始接收NM的心跳,構建集羣的資源信息,並且接收客戶端的作業提交請求。

RM:
1.啓動時候會向ZK的/rmstore目錄寫lock文件,寫成功就爲active,否則standby.
rm節點zkfc會一直監控這個lock文件是否存在,假如不存在,就爲active,否則爲standby.
2.接收client的請求,接收和監控NM的資源狀況的彙報,負載資源的分配和調度。
3.啓動和監控APPMASTER on NM節點的container。
applicationsmanager RM
applicationmaster NM container容器裏 作業的主程序

NM:
節點資源的管理 啓動容器運行task計算 上報資源


爲了更好理解namenode HA。我查閱了有關ZKFC的執行機制。可參考以下兩片文章,
https://www.cnblogs.com/lixiaolun/p/6897706.html
https://blog.csdn.net/u012736748/article/details/79541311。
在這裏插入圖片描述
以下我是的個人理解:
當一個NN 選爲active的時候,會在在zookeeper上創建一個znode,是一個臨時節點,用來存放選舉鎖。當連接斷了,znode自動刪除。

ZKFC核心在於HealthMonitor和ActiveStandbyElector。
HealthMonitor:
ZKFC的HealthMonitor主要是監控NameNode主機上的磁盤還是否可用(空間)。
HealthMonitor會定期的檢查namenode是否健康,ZKFC通過RPC調用監控NN進程,當出現異常時,則進入不同的處理邏輯,調用回調函數。總的來說,如果NN健康(SERVICE_HEALTHY)就加入選舉,如果不健康就退出選舉。
說到退出選舉就關係到elector(ActiveStandbyElector)了,true代表如果NN從Actice變爲Standby出現異常是要去fence的,這就是爲啥NN會掛掉的原因之一。
如何退出選舉?就是close zkClient的鏈接,讓ZooKeeper上面的維持的選舉鎖消失

ActiveStandbyElector: 對於ActiveStandbyElector來說,他有個WatcherWithClientRef類專門用來監聽ZooKeeper上的的znode的事件變化,當事件變化時,就會調用ActiveStandbyElector的processWatchEvent的方法。在ActiveStandbyElector的processWatchEvent方法中,處理來自不同事件的邏輯,重新加入選舉或者繼續監控znode的變化,當另外一個ZKFC監控到事件變化得時候,就去搶鎖,搶鎖實質上就是創建znode的過程,而且創建的是CreateMode.EPHEMERAL類型的,所以,當HealthMonitor監控到NN不健康時,就會斷開連接,節點就會消失,watcher就會監控到NodeDeleted事件,進行創建節點。