hbase各組件的做用

Zookeeper的做用html

保證任什麼時候候,集羣中只有一個master
存貯全部Region的尋址入口。
實時監控RegionServer的狀態,將Region server的上線和下線信息實時通知給Master
存儲Hbase的schema,包括有哪些table,每一個table有哪些column family 緩存

Hmaster的做用 負載均衡

Zookeeper避免了HMaster的單點問題,一個Hbase集羣能夠啓動多個HMaster,而Zookeeper經過Election的方式保證集羣中只有一個HMaster處於live的狀態。其它都處於休眠的狀態,若是HMaster出現問題,則Zookeeper 則喚醒其它休眠的HMaster。性能

一、管理用戶對Table的增、刪、改、查操做spa

二、管理RegionServer的負載均衡、調整Region的分佈server

三、在Region Split後,將新Region分佈到不一樣的RegionServer。
四、在RegionServer宕機後,那該RegionServer上所管理的Region 由HMaster進行從新分配。
總結HMaster 的主要任務:一、HTable DDL 操做 二、Region 分配工做。 其他的基本上都是client 和RegionServer打交道來完成的。htm

HRegionServer的做用對象

HRegionServer 主要負責相應用戶的I/O請求,進而跟HDFS交互,從HDFS中讀寫數據,雖然每一個進程都很重要,但我的認爲HRegionServer是HBase中最核心的進程。
            下面對HRegionServer的內部結構作一個簡單描述:
            HRegionServer 內部管理了一系列的HRegion對象,HRegion和Region是一回事嗎?其實HRegion對應了Table中的一個Region,HRegion是對其進行的封裝。每一個HRegion中由多個HStore組成。
            HStore則對應Table中的Column Family,不論此Column Family 內部有多少數據,都會建立一個新的HStore,所以將相同屬性的數據放進相同的Column Family 頗有必要,避免一次訪問,訪問多個HStore,性能低下。而HStore 則是HBase的核心的存儲單元了,而HStore 由兩個部分組成,一時MemStore,再就是StoreFile
            MemStore 是Sorted Memory Buffer ,client 寫入的數據先寫入MemStore,當達到MemStore的閥值時,將其Flush 成爲一個StoreFile(HFile),StoreFile 則是存儲在硬盤上的文件進程

HBase的第一次讀寫get

參考:http://www.thebigdata.cn/HBase/15305.html

在HBase 0.96之後去掉了-ROOT- Table,只剩下這個特殊的目錄表叫作Meta Table(hbase:meta),它存儲了集羣中全部用戶HRegion的位置信息,而ZooKeeper的節點中(/hbase/meta-region-server)存儲的則直接是這個Meta Table的位置,而且這個Meta Table如之前的-ROOT- Table同樣是不可split的。這樣,客戶端在第一次訪問用戶Table的流程就變成了:

  從ZooKeeper(/hbase/meta-region-server)中獲取hbase:meta的位置(HRegionServer的位置),緩存該位置信息。

  從HRegionServer中查詢用戶Table對應請求的RowKey所在的HRegionServer,緩存該位置信息。

  從查詢到HRegionServer中讀取Row。

  從這個過程當中,咱們發現客戶會緩存這些位置信息,然而第二步它只是緩存當前RowKey對應的HRegion的位置,於是若是下一個要查的RowKey不在同一個HRegion中,則須要繼續查詢hbase:meta所在的HRegion,然而隨着時間的推移,客戶端緩存的位置信息愈來愈多,以致於不須要再次查找hbase:meta Table的信息,除非某個HRegion由於宕機或Split被移動,此時須要從新查詢而且更新緩存。

總結

從每一個組件功能能夠看出,若是Hmaster掛掉,並不影響數據的讀寫,而會致使元數據沒法修改,以及region的分配工做。

相關文章
相關標籤/搜索