1. 程式人生 > >Hbase表格設計

Hbase表格設計

Rowkey設計

Region: 基於RowKey的分割槽,可理解成MySQL的水平切分。

每個Region Server就是Hadoop叢集中一臺機器上的一個程序。

比如我們的有1-300號的RowKey, 那麼1-100RowKey的行被分配到Region Server 1上,同樣,101-200號分配到Region Server 2上, 201-300號分配到Region Server 3上。

在記憶體模型中,我們說RowKey保證了相鄰RowKey的記錄被連續地寫入了磁碟。在這裡,我們發現,RowKey決定了行操作(增,刪,改,查)會被交與哪臺Region Server操作。

 

熱冷資料

 

讓我們假設一下,如果我們的RowKey以記錄的TimeStamp起始,從記憶體模型上說,這很合理,因為我們可能面臨大量的使用者流水記錄查詢,查詢的條件會設定一個時間片段,我們希望一次性從磁碟中讀取這些流水記錄,從而避免頻繁的磁碟尋道操作。

 

但是再另一方面,使用者的流水記錄查詢會很頻繁的出現截至到至今的查詢條件,依照我們上面的程序模型,Region Server 3一定會被分配到(因為最近的記錄排在最後),這樣就可能造成Region Server 3過熱,而Region Server 1“過冷的情況。

 

總結

 

基於以上的模型,大致的理解是:

 

1. RowKey決定了行操作任務進入RegionServer的數量,我們應該儘量的讓一次操作呼叫更多的Region Server,已達到分散式的目的。

 

2. RowKey決定了查詢讀取連續磁碟塊的數量,最理想的情況是一次查詢,在每個Region Server上,只讀取一個磁碟塊。

 

3. ColumnFamily決定了一次查詢需要讀取的檔案數(不同的檔案不僅意味著分散的磁碟塊,還意味著多次的檔案開啟關閉操作)。我們應儘量將希望查詢的結果集合併到一個ColumnFamily中。同時儘量去除該ColumnFamily中不需要的列。

 

4. HBase官方建議儘量的減少ColumnFamily的數量。