本文將針對這個問題介紹如何通過Hbase的BulkLoad方法來快速將海量數(shù)據(jù)導入到Hbase中召娜。
在第一次建立Hbase表的時候恢暖,我們可能需要往里面一次性導入大量的初始化數(shù)據(jù)排监。我們很自然地想到將數(shù)據(jù)一條條插入到Hbase中,或者通過MR方式等杰捂。但是這些方式不是慢就是在導入的過程的占用Region資源導致效率低下社露,所以很不適合一次性導入大量數(shù)據(jù)。本文將針對這個問題介紹如何通過Hbase的BulkLoad方法來快速將海量數(shù)據(jù)導入到Hbase中琼娘。
總的來說峭弟,使用 Bulk Load 方式由于利用了 HBase 的數(shù)據(jù)信息是按照特定格式存儲在 HDFS 里的這一特性,直接在 HDFS 中生成持久化的 HFile 數(shù)據(jù)格式文件脱拼,然后完成巨量數(shù)據(jù)快速入庫的操作瞒瘸,配合 MapReduce 完成這樣的操作,不占用 Region 資源熄浓,不會產(chǎn)生巨量的寫入 I/O情臭,所以需要較少的 CPU 和網(wǎng)絡資源省撑。Bulk Load 的實現(xiàn)原理是通過一個 MapReduce Job 來實現(xiàn)的,通過 Job 直接生成一個 HBase 的內(nèi)部 HFile 格式文件俯在,用來形成一個特殊的 HBase 數(shù)據(jù)表竟秫,然后直接將數(shù)據(jù)文件加載到運行的集群中。與使用HBase API相比跷乐,使用Bulkload導入數(shù)據(jù)占用更少的CPU和網(wǎng)絡資源肥败。
實現(xiàn)原理
Bulkload過程主要包括三部分:
1、從數(shù)據(jù)源(通常是文本文件或其他的數(shù)據(jù)庫)提取數(shù)據(jù)并上傳到HDFS愕提。抽取數(shù)據(jù)到HDFS和Hbase并沒有關系馒稍,所以大家可以選用自己擅長的方式進行,本文就不介紹了浅侨。
2纽谒、利用MapReduce作業(yè)處理實現(xiàn)準備的數(shù)據(jù) 。這一步需要一個MapReduce作業(yè)如输,并且大多數(shù)情況下還需要我們自己編寫Map函數(shù)鼓黔,而Reduce函數(shù)不需要我們考慮,由HBase提供不见。該作業(yè)需要使用rowkey(行鍵)作為輸出Key;KeyValue请祖、Put或者Delete作為輸出Value。MapReduce作業(yè)需要使用HFileOutputFormat2來生成HBase數(shù)據(jù)文件脖祈。為了有效的導入數(shù)據(jù)肆捕,需要配置HFileOutputFormat2使得每一個輸出文件都在一個合適的區(qū)域中。為了達到這個目的盖高,MapReduce作業(yè)會使用Hadoop的TotalOrderPartitioner類根據(jù)表的key值將輸出分割開來慎陵。HFileOutputFormat2的方法configureIncrementalLoad()會自動的完成上面的工作。
3喻奥、告訴RegionServers數(shù)據(jù)的位置并導入數(shù)據(jù)席纽。這一步是最簡單的,通常需要使用LoadIncrementalHFiles(更為人所熟知是completebulkload工具)撞蚕,將文件在HDFS上的位置傳遞給它润梯,它就會利用RegionServer將數(shù)據(jù)導入到相應的區(qū)域。歡迎加入大數(shù)據(jù)學習交流分享群: 658558542? ?一起吹水交流學習(?點擊即可加入群聊)
整個過程圖如下:
代碼實現(xiàn)
上面我們已經(jīng)介紹了Hbase的BulkLoad方法的原理甥厦,我們需要寫個Mapper和驅(qū)動程序纺铭,實現(xiàn)如下:
使用MapReduce生成HFile文件
驅(qū)動程序
通過BlukLoad方式加載HFile文件
由于Hbase的BulkLoad方式是繞過了Write to WAL,Write to MemStore及Flush to disk的過程刀疙,所以并不能通過WAL來進行一些復制數(shù)據(jù)的操作舶赔。后面我將會再介紹如何通過Spark來使用Hbase的BulkLoad方式來初始化數(shù)據(jù)。
BulkLoad的使用案例
1谦秧、首次將原始數(shù)據(jù)集載入 HBase- 您的初始數(shù)據(jù)集可能很大竟纳,繞過 HBase 寫入路徑可以顯著加速此進程撵溃。
2、遞增負載 - 要定期加載新數(shù)據(jù)锥累,請使用 BulkLoad 并按照自己的理想時間間隔分批次導入數(shù)據(jù)缘挑。這可以緩解延遲問題,并且有助于您實現(xiàn)服務級別協(xié)議 (SLA)桶略。但是语淘,壓縮觸發(fā)器就是 RegionServer 上的 HFile 數(shù)目。因此删性,頻繁導入大量 HFile 可能會導致更頻繁地發(fā)生大型壓縮,從而對性能產(chǎn)生負面影響焕窝。您可以通過以下方法緩解此問題:調(diào)整壓縮設置蹬挺,確保不觸發(fā)壓縮即可存在的最大 HFile 文件數(shù)很高,并依賴于其他因素它掂,如 Memstore 的大小 觸發(fā)壓縮巴帮。
3、數(shù)據(jù)需要源于其他位置 - 如果當前系統(tǒng)捕獲了您想在 HBase 中包含的數(shù)據(jù)虐秋,且因業(yè)務原因需要保持活動狀態(tài)榕茧,您可從系統(tǒng)中將數(shù)據(jù)定期批量加載到 HBase 中,以便可以在不影響系統(tǒng)的前提下對其執(zhí)行操作客给。
結(jié)語
感謝您的觀看用押,如有不足之處,歡迎批評指正靶剑。
如果有對大數(shù)據(jù)感興趣的小伙伴或者是從事大數(shù)據(jù)的老司機可以加群:
658558542? ? (?點擊即可加入群聊)
里面整理了一大份學習資料蜻拨,全都是些干貨,包括大數(shù)據(jù)技術入門桩引,海量數(shù)據(jù)高級分析語言缎讼,海量數(shù)據(jù)存儲分布式存儲,以及海量數(shù)據(jù)分析分布式計算等部分坑匠,送給每一位大數(shù)據(jù)小伙伴血崭,這里不止是小白聚集地,還有大牛在線解答厘灼!歡迎初學和進階中的小伙伴一起進群學習交流夹纫,共同進步!
最后祝福所有遇到瓶頸的大數(shù)據(jù)程序員們突破自己设凹,祝福大家在往后的工作與面試中一切順利捷凄。