zookeeper與hbase

zookeeper與HDFS

在2.0之前HDFS中只有一個NameNode,但對于在線的應用只有一個NameNode是不安全的,故在2.0中對NameNode進行抽象,抽象成NamService其下包含有多個NameNode,但只有一個運行在活躍狀態,因此需要zookeeper進行選舉和自動轉換。一旦active當掉之后zookeeper會自定進行切換將standby切換為active。

圖片來源:HDFS-1623設計文檔

圖片作者: Sanjay Radia, Suresh Srinivas

如上圖,每一個運行NameNode的機器上都會運行一個FailoverController Active進程,用于監控NameNode,即FailoverController與NameNode 二者是運行在同一臺節點上的。

1】、如上,系統中Active NameNode一旦數據發生變化,Active NameNode會將變化(edits文件)寫入到介質中,通常介質使用:

1、NFS網絡文件系統;

2、依賴于zookeeper的JournalNode,當機器不是很多時可以使用JournalNode存儲edits,而一旦介質中數據發生變化,Standby的NameNode會實時同步介質中的數據,因此ActiveNameNode與處于Standby的NameNode是實時數據同步的,

2】、FailoverController Active進程會實時監控Active的NameNode并把他的信息匯報給zookeeper由此不難理解為什么要將FailoverController與NameNode?安裝在同一個節點上了吧,因為FailoverController需要實時的監控NameNode將二者放在同一個節點上),若active NameNode沒有發生故障,FailoverController Active進程會每隔一段時間將監控Actice NameNode的狀態,并將Active NameNode的信息發送給zookeeper。若一旦監控到Active NameNode出現問題,就會將信息匯報給zookeeper,而另一個Standby FailoverController進程與active?FailoverController進程是數據同步的(通過zookeeper實現)因此,Standby?FailoverController進程會同時知道Active NameNode當掉了,此時會給它監控的Standby NameNode節點發送信息,使其成為Active NameNode。

CDH5.7.1版本的hdfs在zookeeper的目錄為:/hadoop-ha/nameservice1/{ActiveBreadCrumb/ActiveStandbyElectorLock}

hadoop-ha/Namespace(集群當前為nameservice1 -- 對應hdfs的NameNode Nameservice配置);nameservice1 目錄下有:ActiveBreadCrumb ActiveStandbyElectorLock 其內容均為nameservice1 - hadoop6 (hadoop6為當前activeNameNode hadoop7為standbyNameNode)

yarn在zookeeper上的節點:/yarn-leader-election/yarnRM/{ActiveBreadCrumb/ActiveStandbyElectorLock} 記載resourceManager的Active節點服務器地址

/rmstore/ZKRMStateRoot/{RMAppRoot,AMRMTokenSecretManagerRoot,EpochNode,RMDTSecretManagerRoot,RMVersionNode} 其中RMAppRoot保留了所有歷史的提交到yarn上的應用程序的元數據。

/hbase/[...rs,master,balancer,namespace,hbaseid,table ...]

rs保留了region server的入口 其子節點對應region server 的 regionServer:60030/rs-status 中 的 RegionServer描述-ServerName(一般來說DataNode節點上都會安裝region server 移動計算而不是移動數據)

balancer記錄了其負載數據? namespace 記錄了hbase的命名空間 一個命名空間包含default和hbase,命名空間內創建hbase表

hbaseid記錄著hbase cluster id,table里的子節點為hbase上的表。table-lock? 上鎖的table表


與kafka的結合 -- kafka目錄的配置在 kafka-配置的Zookeeper Root -- zookeeper.chroot 如果為空在默認在zookeeper的根目錄下直接創建admin等節點,如果添加/kafka的話,則在/kafka的節點下創建一系列節點。

/kafka/{admin,isr_change_notification,controller_epoch,consumers,brokers,config,controller} 為kafka提供服務其中admin節點包含deletetopics其子節點為所有刪除過得topic。isr_change_notification實現kafka分區同步監聽任務。consumers記錄了當前的消費者。brokers包含{ids,topics,seqid},ids包含子節點為brokerid 此時為170 --對應著kafka配置中的Kafka Broker 的Broker ID -- broker.id (當前kafka集群只有一個broker 其brokerid為170). brokerid為170,該節點的內容為{"jmx_port":"9393","timestamp","","endpoints":["PLAINTEXT://10.2.5.64:9092"],"host":"10.2.5.64","version":2,"port":9092} topics下面的節點對應的是有多少個topic,每個topic的子節點為partitions,partitions的子節點為分區編號{0,1,2,...},每個分區編號子節點為state,state節點下沒有子節點了。state的數據為{"controller_epoch":25,"leader":170(brokerid),"version":1,"leader_epoch":1,"isr":[170]} isr--對應的是該分區數據處在同步狀態副本的brokerid

zookeeper與Hbase

Client客戶端、Master、Region都會通過心跳機制(RPC通信)與zookeeper保持聯系。

當在Hbase中插入或讀取數據時流程如下;

1、在Client中寫一個Java類運行,客戶端只需要連接zookeeper客戶端會從zookeeper中得到Regionserver的映射信息,之后客戶端會直接連接到Region Server,

2、RegionServer在啟動之后會向zookeeper匯報信息(通過心跳RPC):本身有多少Region,有哪些數據,當前機器的運行狀況等等。

3、master 啟動后也會向zookeeper匯報信息,并且從zookeeper中得到Region Server的一些信息。例如當一臺Region Server當掉之后,zookeeper會得知,之后Master也會通過zookeeper得到該Region Server當掉的信息。

4、客戶端Client在做DDL(創建,修改,刪除表)時,會通過zookeeper獲取到Master的地址,而Master中保存了表的元數據信息,之后Client就可以直接與Master進行通信,進行表的DDL操作

5、當Region中數據不斷增大,MAster會向Region Serve發送指令,講分割出來的Region進行轉移,

Zookeeper

1】保證任何時候,集群中只有一個活躍的master,因為為保證安全性會啟動多個Master

2】存儲所有Region的尋址入口。知道那個Region在哪臺機器上。

3】實時監控Region Server的狀態,將Region Server的上下線的信息匯報給HMaster。(因為每間隔一段時間,RegionServer與Master都會zookeeper發送心跳信息),Region Server不直接向Master發送信息的原因是為了減少Master的壓力因為只有一個活躍的Master,所有的RegionServer同時向他匯報信息,壓力太大。而若有100臺RegionServer時,Region Server可以分每10臺向一個zookeeper匯報信息,實現zookeeper的負載均衡。

4】存儲Hbase的元數據(Schema)包括,知道整個Hbase集群中有哪些Table,每個?Table 有哪些column family(列族)

Client

Client包含了訪問Hbase的接口,Client維護這些Cache來加快對Hbase的訪問,比如Region的位置信息,zookeeperzookeeper保證了任何時候群眾只有一個Master存儲所有的Region中的尋址入口還有實時監控RegionServer上的狀態,將RegionServer的上線和下線信息實時通知給Master,存儲hbase 的Schema,包括有哪些table,每個Table有哪些Column Family

Master

Master有以下特點:

1、為RegionServer分配Region

2、負責RegionServer的負載均衡

3、發現失效的RegionServer并重新分配其上的Region

4、HDFS上的垃圾文件回收

5、處理Schema更新請求

RegionServer有以下幾點:

1、RegionServer維護Master分配給他的 Region,處理對這些Region的IO請求

2、RegionServer負責切分在運行過程中變得過大的Region,

因此可看出,Client訪問Hbase上的數據的過程并不需要Master的參與(尋址訪問zookeeper和Region Serve,寫數據訪問Region Server)Master僅僅維護著table和Region的元數據信息。負載很低。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容