1. 程式人生 > >Hadoop系列之-Hbase資料設計問題

Hadoop系列之-Hbase資料設計問題

Hadoop系列之-Hbase資料設計問題

      Hbase是一個基於HDFS,可通過MapReduce計算的分散式列式資料庫,每行資料都有一個rowKey作為當前資料的唯一Sign,當然,也可通過Column Family將列進行分組。
在這裡插入圖片描述
      那麼既然是一個分散式資料庫,Hbase的表可以進行分割槽,Table在行的方向上可分割為多個Region,一個Region由[startkey,endkey]標識,每個HRegion分散在不同的RegionServer中。

Hbase的分割槽方式有兩種,熱分割槽和預分割槽
       熱分割槽,熱分割槽就是當一個RegionServer認為某張表資料量過大不得不分割槽時,會尋找一個midkey將region一分為二,這個過程稱為分裂(region-split)
       預分割槽,在建表是提前將Region的規則明確,那麼資料新增時會直接根據rowkey和預定義的規則將資料插入到不同的Region中

      很顯然,熱分割槽會造成資料傾斜、熱點寫、分裂頻率隨資料迅速增長等缺陷,那麼預分割槽非常完美的解決了以上問題,但是這也引發了一個很嚴重的問題,就是資料不連貫。

筆者在開發中的一個非常棘手的問題:
      rowkey設計為 3050:650212#9852315625256(列號:車號:時間戳)
      這種設計的結果就是預分割槽時根據列號進行分割,即每一個列車的資料都有獨立的分割槽,那麼假如我們需要通過對時間排序進行資料查詢,就只能在同一列號下的資料進行查詢。或者建立二級索引,但通過二級索引的查詢網路IO是個問題,其實就是HDFS block的切換問題。