天天看點

HBASE入庫方式比較一.概述二.入庫方式三.實作四.測試五.總結

一.概述

本文主要從HBASE入庫的不同方式進行闡述,對HBASE的參數調整本文不進行過多闡述。HBASE資料入庫主要目的是保證資料快速,準确,完整的進入HBASE,并在資料入庫時盡量少占用大資料叢集資源,減少對大資料叢集的影響。

二.入庫方式

HBASE資料入庫主要分成以下三種方式:

1.MR預生成HFILE

采用MR的方式進行HFILE進行生成,生成HFILE檔案後采用LOAD方式進行資料入庫           

2.MR過程中PUT

采用MR中Map階段進行PUT資料入庫           

3.HBASE原生口的PUT方式

用JAVA調用HBASE的PUT接口進行資料入庫
           

1和2都存在MR的過程,會使用叢集YARN的資源,而且如果沒有進行HBASE的參數調整和預分區操作,會引起HBASE的region的split;3方式采用多用戶端,多線程方式進行資料入庫,本身用的就是HBASE的原生方式,排序合并操作都壓給了HBASE,受制于網絡和記憶體。

從上面的原理描述,3方式看上去是入庫最合适的方式,但是對于服務端的壓力卻是最大的。

為了完成本文所說的盡量少占用大資料叢集資源目的,對于預生成HFILE方式需進行優化,不采用MR方式進行生成。

三.實作

1.非MR方式預生成HFILE方式優化

1)将資料生成KeyValue放入list,并将其進行排序

HBASE入庫方式比較一.概述二.入庫方式三.實作四.測試五.總結

2)使用StoreFile.Writer将資料寫入到HDFS的HFILE中

HBASE入庫方式比較一.概述二.入庫方式三.實作四.測試五.總結

3)将生成的HFILE檔案用doBulkLoad導入到HBASE

HBASE入庫方式比較一.概述二.入庫方式三.實作四.測試五.總結

2.使用HBASE的原生接口PUT

HBASE入庫方式比較一.概述二.入庫方式三.實作四.測試五.總結

四.測試

測試方案主要進行HFILE入庫,PUT入庫,多列,全列按不同資料量進行測試

名詞解釋:

file:hfile方式入庫

put:put方式入庫

column:多列,每列獨立

columnall:全列,列合并打包

10W:代表資料量

如file_column_10w代表用hfile方式入庫10W資料量的多列

注:下述時間都是秒

入庫方式/送出記錄數 KV滿一萬 1萬條記錄 2萬條記錄 4萬條記錄 8萬條記錄
file_column_10w 158 122 114 110 106
file_columnall_10w 116 77 78 69
put_column_10w 125 188 196 202 181
put_columnall_10w 53 62 60 68
file_column_100w 1823 1161 1138 1005 1003
file_columnall_100w 1230 597 565 539 510
put_column_100w 1501 1534 1804 2100 1913
put_columnall_100w 844 472 462 465 477
file_column_1000w 10301
file_columnall_1000w 4806
put_column_1000w 21311
put_columnall_1000w 5050

五.總結

  1. hfile檔案方式入庫會随着送出資料記錄數的增加而效率提升
  2. put方式入庫送出資料記錄數增加不能很明顯提升效率,有時候反而會變慢,原因應該是memstore需要清除曆史KeyValue的緣故,并受到緩存大小限制,而hfile方式會直接繞過memstore,不受memstore限制。
  3. 當資料記錄數大的時候,hfile的方式優于put方式
  4. hfile方式在資料量小的時候,增加送出記錄數效率不明顯
  5. hfile方式可以自由控制導入hfile的大小,優勢就是減少hfile的compact,劣勢就是需要增加按region來生成hfile防止bulkload時再分裂
  6. hfile方式适合大資料量資料導入,put方式小量資料導入,put會比hfile時效性高
  7. 全列的入庫方式比多列的入庫方式效率要高很多,而且HFILE檔案也會小很多,相應的存儲會減少,原因是減少了rowkey的存儲

繼續閱讀