Hbase教程:經過BulkLoad快速將海量數據導入到Hbase

本文將針對這個問題介紹如何經過Hbase的BulkLoad方法來快速將海量數據導入到Hbase中。程序員

在第一次創建Hbase表的時候,咱們可能須要往裏面一次性導入大量的初始化數據。咱們很天然地想到將數據一條條插入到Hbase中,或者經過MR方式等。可是這些方式不是慢就是在導入的過程的佔用Region資源致使效率低下,因此很不適合一次性導入大量數據。本文將針對這個問題介紹如何經過Hbase的BulkLoad方法來快速將海量數據導入到Hbase中。面試

總的來講,使用 Bulk Load 方式因爲利用了 HBase 的數據信息是按照特定格式存儲在 HDFS 裏的這一特性,直接在 HDFS 中生成持久化的 HFile 數據格式文件,而後完成巨量數據快速入庫的操做,配合 MapReduce 完成這樣的操做,不佔用 Region 資源,不會產生巨量的寫入 I/O,因此須要較少的 CPU 和網絡資源。Bulk Load 的實現原理是經過一個 MapReduce Job 來實現的,經過 Job 直接生成一個 HBase 的內部 HFile 格式文件,用來造成一個特殊的 HBase 數據表,而後直接將數據文件加載到運行的集羣中。與使用HBase API相比,使用Bulkload導入數據佔用更少的CPU和網絡資源。數據庫

實現原理網絡

Bulkload過程主要包括三部分:app

一、從數據源(一般是文本文件或其餘的數據庫)提取數據並上傳到HDFS。抽取數據到HDFS和Hbase並無關係,因此你們能夠選用本身擅長的方式進行,本文就不介紹了。分佈式

二、利用MapReduce做業處理實現準備的數據 。這一步須要一個MapReduce做業,而且大多數狀況下還須要咱們本身編寫Map函數,而Reduce函數不須要咱們考慮,由HBase提供。該做業須要使用rowkey(行鍵)做爲輸出Key;KeyValue、Put或者Delete做爲輸出Value。MapReduce做業須要使用HFileOutputFormat2來生成HBase數據文件。爲了有效的導入數據,須要配置HFileOutputFormat2使得每個輸出文件都在一個合適的區域中。爲了達到這個目的,MapReduce做業會使用Hadoop的TotalOrderPartitioner類根據表的key值將輸出分割開來。HFileOutputFormat2的方法configureIncrementalLoad()會自動的完成上面的工做。函數

三、告訴RegionServers數據的位置並導入數據。這一步是最簡單的,一般須要使用LoadIncrementalHFiles(更爲人所熟知是completebulkload工具),將文件在HDFS上的位置傳遞給它,它就會利用RegionServer將數據導入到相應的區域。歡迎加入大數據學習交流分享羣: 658558542   一塊兒吹水交流學習(☛點擊便可加入羣聊工具

整個過程圖以下:oop

代碼實現性能

上面咱們已經介紹了Hbase的BulkLoad方法的原理,咱們須要寫個Mapper和驅動程序,實現以下:

使用MapReduce生成HFile文件

驅動程序

經過BlukLoad方式加載HFile文件

因爲Hbase的BulkLoad方式是繞過了Write to WAL,Write to MemStore及Flush to disk的過程,因此並不能經過WAL來進行一些複製數據的操做。後面我將會再介紹如何經過Spark來使用Hbase的BulkLoad方式來初始化數據。

BulkLoad的使用案例

一、首次將原始數據集載入 HBase- 您的初始數據集可能很大,繞過 HBase 寫入路徑能夠顯著加速此進程。

二、遞增負載 - 要按期加載新數據,請使用 BulkLoad 並按照本身的理想時間間隔分批次導入數據。這能夠緩解延遲問題,而且有助於您實現服務級別協議 (SLA)。可是,壓縮觸發器就是 RegionServer 上的 HFile 數目。所以,頻繁導入大量 HFile 可能會致使更頻繁地發生大型壓縮,從而對性能產生負面影響。您能夠經過如下方法緩解此問題:調整壓縮設置,確保不觸發壓縮便可存在的最大 HFile 文件數很高,並依賴於其餘因素,如 Memstore 的大小 觸發壓縮。

三、數據須要源於其餘位置 - 若是當前系統捕獲了您想在 HBase 中包含的數據,且因業務緣由須要保持活動狀態,您可從系統中將數據按期批量加載到 HBase 中,以即可以在不影響系統的前提下對其執行操做。

結語

感謝您的觀看,若有不足之處,歡迎批評指正。

若是有對大數據感興趣的小夥伴或者是從事大數據的老司機能夠加羣:

658558542    (☛點擊便可加入羣聊

裏面整理了一大份學習資料,全都是些乾貨,包括大數據技術入門,海量數據高級分析語言,海量數據存儲分佈式存儲,以及海量數據分析分佈式計算等部分,送給每一位大數據小夥伴,這裏不止是小白彙集地,還有大牛在線解答!歡迎初學和進階中的小夥伴一塊兒進羣學習交流,共同進步!

最後祝福全部遇到瓶頸的大數據程序員們突破本身,祝福你們在日後的工做與面試中一切順利。

相關文章
相關標籤/搜索