日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

架構組成

HBase采用Master/Slave架構搭建集群,它隸屬于Hadoop生態系統,由一下類型節點組成:HMaster節點、HRegionServer節點、ZooKeeper集群,而在底層,它將數據存儲于HDFS中,因而涉及到HDFS的NameNode、DataNode等,總體結構如下:

Hbase架構詳解

 

?

在物理上,HBase由master/slave類型體系結構中的三種服務器組成。RegionServer為讀取和寫入提供數據。訪問數據時,Client直接與Region Server通信。Region的分配,DDL(創建,刪除表)操作由HMaster處理。作為HDFS一部分的Zookeeper維護活動集群狀態。 Hadoop DataNode存儲Region Server正在管理的數據。所有HBase數據都存儲在HDFS文件中。Region Server與HDFS數據節點并置,從而為Region Server提供的數據實現數據局部性。除了Region在Split的時候,Hbase寫入不是本地的,但是在Hbase在完成compaction之后 HBase數據是基于Local寫入的。NameNode維護構成文件的所有物理數據塊的元數據信息。

Hbase架構詳解

山東掌趣網絡科技

?

Regions

HBase表按RowKey范圍水平劃分為“Region”。一個Region包含表中該Region的開始鍵和結束鍵之間的所有行。將Region分配給群集中稱為“Region Server”的節點,這些Region Server為讀取和寫入提供數據。Region Server可以服務大約1,000個區域。

Hbase架構詳解

山東掌趣網絡科技

?

HBase HMaster

區Region分配,DDL(創建,刪除表)操作由HBase Master處理。

HBase Master主要負責:

Coordinating the region servers

- Assigning regions on startup , re-assigning regions for recovery or load balancing

- Monitoring all RegionServer instances in the cluster (listens for notifications from zookeeper)

Admin functions

- Interface for creating, deleting, updating tables

Hbase架構詳解

山東掌趣網絡科技

?

ZooKeeper

ZooKeeper為HBase集群提供協調服務,它管理著HMaster和HRegionServer的狀態(available/alive等),并且會在它們宕機時通知給HMaster,從而HMaster可以實現HMaster之間的failover,或對宕機的HRegionServer中的HRegion集合的修復(將它們分配給其他的HRegionServer)。ZooKeeper集群本身使用一致性協議(PAXOS協議)保證每個節點狀態的一致性。

Hbase架構詳解

?山東掌趣網絡科技

?

總結

Zookeeper用于協調分布式系統成員的共享狀態信息。Region Server和Active的HMaster通過與ZooKeeper的會話連接。 ZooKeeper通過心跳維護臨時節點以進行活動會話。

Hbase架構詳解

山東掌趣網絡科技

每個RegionServer都會創建一個臨時節點。 HMaster監視這些節點以發現可用的Region Server,并且還監視這些節點的服務器故障。 HMasters試圖創建一個臨時節點。 Zookeeper確定第一個Master,并使用它來確保只有一個Master處于Active狀態。活動的HMaster將心跳發送到Zookeeper,非活動的HMaster偵聽活動的HMaster故障的通知。 如果Region Server或Active的HMaster無法發送心跳,則會話過期,并刪除相應的臨時節點。更新的偵聽器將被通知已刪除的節點。Active的HMaster偵聽Region Sever,并在發生故障時恢復Region Server。非活動HMaster偵聽活動的HMaster故障,如果Active的HMaster發生故障,則非活動的HMaster會變為活動狀態。

HBase首先讀取或寫入

有一個稱為META表的特殊HBase目錄表,該表保存集群中Region的位置。 ZooKeeper存儲META表的位置信息。

這是客戶端第一次讀取或寫入HBase時發生的情況:

1、客戶端從ZooKeeper獲取托管META表的Region服務器。

2、客戶端將查詢.META。服務器以獲取與要訪問的行鍵相對應的區域服務器。客戶端將該信息與META表位置一起緩存。

3、它將從相應的區域服務器獲取行。

為了將來讀取,客戶端使用緩存來檢索META位置和先前讀取的行鍵。隨著時間的流逝,它不需要查詢META表,除非由于區域移動導致遺漏;然后它將重新查詢并更新緩存。

Hbase架構詳解

?山東掌趣網絡科技

?

META表

hbase:meta表存儲了所有用戶HRegion的位置信息,它的RowKey是:tableName,regionStartKey,regionId,replicaId等,它只有info列族,這個列族包含三個列,他們分別是:

info:regioninfo:regionId,tableName,startKey,endKey,offline,split,replicaId;

info:server:HRegionServer對應的server:port;

info:serverstartcode:HRegionServer的啟動時間戳。

Hbase架構詳解

?山東掌趣網絡科技

?HRegion Server

Region Server在HDFS數據節點上運行,并具有以下組件:

WAL: 預寫日志是分布式文件系統上的文件。 WAL用于存儲尚未持久存儲的新數據。發生故障時用于恢復。

BlockCache:是讀取緩存。它將經常讀取的數據存儲在內存中。滿時將逐出最近最少使用的數據。

MemStore:是寫緩存。它存儲尚未寫入磁盤的新數據。在寫入磁盤之前先對其進行排序。每個區域的每個列族都有一個MemStore。

HRegion:一個Table可以有一個或多個Region,他們可以在一個相同的HRegionServer上,也可以分布在不同的HRegionServer上,一個HRegionServer可以有多個HRegion,他們分別屬于不同的Table。HRegion由多個Store(HStore)構成,每個HStore對應了一個Table在這個HRegion中的一個Column Family,即每個Column Family就是一個集中的存儲單元,因而最好將具有相近IO特性的Column存儲在一個Column Family,以實現高效讀取(數據局部性原理,可以提高緩存的命中率)。HStore是HBase中存儲的核心,它實現了讀寫HDFS功能,一個HStore由一個MemStore 和0個或多個StoreFile組成

MemStore(In Memory Sorted Buffer),所有數據的寫在完成WAL日志寫后,會 寫入MemStore中,由MemStore根據一定的算法將數據Flush到地層HDFS文件中(HFile),通常每個HRegion中的每個 Column Family有一個自己的MemStore。

HFile在HFile中的數據是按RowKey、Column Family、Column排序,對相同的Cell(即這三個值都一樣),則按timestamp倒序排列。

Hbase架構詳解

?山東掌趣網絡科技

?

當客戶端發起一個Put請求時,首先它從hbase:meta表中查出該Put數據最終需要去的HRegionServer。然后客戶端將Put請求發送給相應的HRegionServer,在HRegionServer中它首先會將該Put操作寫入WAL日志文件中(Flush到磁盤中)。

Hbase架構詳解

?山東掌趣網絡科技

?

寫完WAL日志文件后,HRegionServer根據Put中的TableName和RowKey找到對應的HRegion,并根據Column Family找到對應的HStore,并將Put寫入到該HStore的MemStore中。此時寫成功,并返回通知客戶端。MemStore是一個In Memory Sorted Buffer,在每個HStore中都有一個MemStore,即它是一個HRegion的一個Column Family對應一個實例。它的排列順序以RowKey、Column Family、Column的順序以及Timestamp的倒序,如下所示:

Hbase架構詳解

?山東掌趣網絡科技

?

每一次Put/Delete請求都是先寫入到MemStore中,當MemStore滿后會Flush成一個新的StoreFile(底層實現是HFile),即一個HStore(Column Family)可以有0個或多個StoreFile(HFile)。有以下三種情況可以觸發MemStore的Flush動作,需要注意的是MemStore的最小Flush單元是HRegion而不是單個MemStore。

當一個HRegion中的所有MemStore的大小總和超過了
hbase.hregion.memstore.flush.size的大小,默認128MB。此時當前的HRegion中所有的MemStore會Flush到HDFS中。

當全局MemStore的大小超過了
hbase.regionserver.global.memstore.upperLimit的大小,默認40%的內存使用量。此時當前HRegionServer中所有HRegion中的MemStore都會Flush到HDFS中,Flush順序是MemStore大小的倒序,直到總體的MemStore使用量低于
hbase.regionserver.global.memstore.lowerLimit,默認38%的內存使用量。

當前HRegionServer中WAL的大小超過了
hbase.regionserver.hlog.blocksize *
hbase.regionserver.max.logs的數量,當前HRegionServer中所有HRegion中的MemStore都會Flush到HDFS中,Flush使用時間順序,最早的MemStore先Flush直到WAL的數量少于
hbase.regionserver.hlog.blocksize *
hbase.regionserver.max.logs

在MemStore Flush過程中,還會在尾部追加一些meta數據,其中就包括Flush時最大的WAL sequence值,以告訴HBase這個StoreFile寫入的最新數據的序列,那么在Recover時就直到從哪里開始。在HRegion啟動時,這個sequence會被讀取,并取最大的作為下一次更新時的起始sequence。

Hbase架構詳解

?山東掌趣網絡科技

HFile里面的每個KeyValue對就是一個簡單的byte數組。但是這個by

te數組里面包含了很多項,并且有固定的結構。我們來看看里面的具體結構:

Hbase架構詳解

山東掌趣網絡科技

?

開始是兩個固定長度的數值,分別表示Key的長度和Value的長度。緊接著是Key,開始是固定長度的數值,表示RowKey的長度,緊接著是 RowKey,然后是固定長度的數值,表示Family的長度,然后是Family,接著是Qualifier,然后是兩個固定長度的數值,表示Time Stamp和Key Type(Put/Delete)。Value部分沒有這么復雜的結構,就是純粹的二進制數據了。

HBase讀實現

通過上文的描述,我們知道在HBase寫時,相同Cell(
RowKey/ColumnFamily/Column相同)并不保證在一起,甚至刪除一個Cell也只是寫入一個新的Cell,它含有Delete標記,而不一定將一個Cell真正刪除了,因而這就引起了一個問題,如何實現讀的問題?要解決這個問題,我們先來分析一下相同的Cell可能存在的位置:首先對新寫入的Cell,它會存在于MemStore中;然后對之前已經Flush到HDFS中的Cell,它會存在于某個或某些StoreFile(HFile)中;最后,對剛讀取過的Cell,它可能存在于BlockCache中。既然相同的Cell可能存儲在三個地方,在讀取的時候只需要掃瞄這三個地方,然后將結果合并即可(Merge Read),在HBase中掃瞄的順序依次是:BlockCache、MemStore、StoreFile(HFile)。其中StoreFile的掃瞄先會使用Bloom Filter過濾那些不可能符合條件的HFile,然后使用Block Index快速定位Cell,并將其加載到BlockCache中,然后從BlockCache中讀取。我們知道一個HStore可能存在多個StoreFile(HFile),此時需要掃瞄多個HFile,如果HFile過多又是會引起性能問題。

Hbase架構詳解

?山東掌趣網絡科技

?

MemStore每次Flush會創建新的HFile,而過多的HFile會引起讀的性能問題,那么如何解決這個問題呢?HBase采用Compaction機制來解決這個問題在HBase中Compaction分為兩種:Minor Compaction和Major Compaction。

Minor Compaction是指選取一些小的、相鄰的StoreFile將他們合并成一個更大的StoreFile,在這個過程中不會處理已經Deleted或Expired的Cell。一次Minor Compaction的結果是更少并且更大的StoreFile。

Major Compaction是指將所有的StoreFile合并成一個StoreFile,在這個過程中,標記為Deleted的Cell會被刪除,而那些已經Expired的Cell會被丟棄,那些已經超過最多版本數的Cell會被丟棄。一次Major Compaction的結果是一個HStore只有一個StoreFile存在。Major Compaction可以手動或自動觸發,然而由于它會引起很多的IO操作而引起性能問題,因而它一般會被安排在周末、凌晨等集群比較閑的時間。

Hbase架構詳解

山東掌趣網絡科技

?

HRegion Split

最初,一個Table只有一個HRegion,隨著數據寫入增加,如果一個HRegion到達一定的大小,就需要Split成兩個HRegion,這個大小由
hbase.hregion.max.filesize指定,默認為10GB。當split時,兩個新的HRegion會在同一個HRegionServer中創建,它們各自包含父HRegion一半的數據,當Split完成后,父HRegion會下線,而新的兩個子HRegion會向HMaster注冊上線,處于負載均衡的考慮,這兩個新的HRegion可能會被HMaster分配到其他的HRegionServer中。

Hbase架構詳解

山東掌趣網絡科技

?

在HRegion Split后,兩個新的HRegion最初會和之前的父HRegion在相同的HRegionServer上,出于負載均衡的考慮,HMaster可能會將其中的一個甚至兩個重新分配的其他的HRegionServer中,此時會引起有些HRegionServer處理的數據在其他節點上,直到下一次Major Compaction將數據從遠端的節點移動到本地節點。

HRegionServer Recovery

當一臺HRegionServer宕機時,由于它不再發送Heartbeat給ZooKeeper而被監測到,此時ZooKeeper會通知HMaster,HMaster會檢測到哪臺HRegionServer宕機,它將宕機的HRegionServer中的HRegion重新分配給其他的HRegionServer,同時HMaster會把宕機的HRegionServer相關的WAL拆分分配給相應的HRegionServer(將拆分出的WAL文件寫入對應的目的HRegionServer的WAL目錄中,并并寫入對應的DataNode中),從而這些HRegionServer可以Replay分到的WAL來重建MemStore。

Hbase架構詳解

山東掌趣網絡科技

?山東掌趣網絡科技

分享到:
標簽:架構 Hbase
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定