通過BulkLoad的方式快速匯入海量資料

2021-09-30 20:25:11 字數 2038 閱讀 2670

摘要

載入資料到hbase的方式有多種,通過hbase api匯入或命令列匯入或使用第三方(如sqoop)來匯入或使用mr來批量匯入(耗費磁碟i/o,容易在匯入的過程使節點宕機),但是這些方式不是慢就是在匯入的過程的占用region資料導致效率低下,今天要講的就是利用hbase在hdfs儲存原理及mapreduce的特性來快速匯入海量的資料

hbase資料在hdfs下是如何儲存的?

hbase中每張table在根目錄(/hbase)下用乙個資料夾儲存,table名為資料夾名,在table資料夾下每個region同樣用乙個資料夾儲存,每個region資料夾下的每個列族也用資料夾儲存,而每個列族下儲存的就是一些hfile檔案,hfile就是hbase資料在hfds下儲存格式,其整體目錄結構如下:

/hbase////

hbase資料寫路徑

(圖來自cloudera)

在put資料時會先將資料的更新操作資訊和資料資訊寫入wal,在寫入到wal後,資料就會被放到memstore中,當memstore滿後資料就會被flush到磁碟(即形成hfile檔案),在這過程涉及到的flush,split,compaction等操作都容易造成節點不穩定,資料匯入慢,耗費資源等問題,在海量資料的匯入過程極大的消耗了系統效能,避免這些問題最好的方法就是使用blukload的方式來載入資料到hbase中。

原理

利用hbase資料按照hfile格式儲存在hdfs的原理,使用mapreduce直接生成hfile格式檔案後,regionservers再將hfile檔案移動到相應的region目錄下

其流程如下圖:

(圖來自cloudera)

匯入過程

1.使用mapreduce生成hfile檔案

generatehfile類

publicclassgeneratehfileextendstext, immutablebyteswritable, put>

}

generatehfilemain類

public class generatehfilemain
注意2.job.setmapoutputvalueclass的值決定了job.setreduceclass的值,這裡reduce主要起到了對資料進行排序的作用,當job.setmapoutputvalueclass的值put.class和keyvalue.class分別對應job.setreduceclass的putsortreducer和keyvaluesortreducer

3.在建立表時對錶進行預分割槽再結合mapreduce的平行計算機制能加快hfile檔案的生成,如果對錶進行了預分割槽(region)就設定reduce數等於分割槽數(region)

4.在多列族的情況下需要進行多次的context.write

2.通過blukload方式載入hfile檔案

public class loadincrementalhfiletohbase 

}

由於bulkload是繞過了write to wal,write to memstore及flush to disk的過程,所以並不能通過wal來進行一些複製資料的操作

優點:1.匯入過程不占用region資源

2.能快速匯入海量的資料

3.節省記憶體

通過BulkLoad的方式快速匯入海量資料

載入資料到hbase的方式有多種,通過hbase api匯入或命令列匯入或使用第三方 如sqoop 來匯入或使用mr來批量匯入 耗費磁碟i o,容易在匯入的過程使節點宕機 但是這些方式不是慢就是在匯入的過程的占用region資料導致效率低下,今天要講的就是利用hbase在hdfs儲存原理及mapre...

通過BlukLoad的方式快速匯入海量資料

摘要載入資料到hbase的方式有多種,通過hbase api匯入或命令列匯入或使用第三方 如sqoop 來匯入或使用mr來批量匯入 耗費磁碟i o,容易在匯入的過程使用節點宕機 但是這些方式不是慢就是在匯入的過程的占用region資料導致效率低下,今天要講的就是利用hbase在hdfs儲存原理及ma...

通過「表白」的方式,讓我們快速了解網路協議

本章主要介紹網路協議,這個協議就叫做osi協議 一系列協議 按照功能不同,分工不同,人為的分層七層。實際上這個七層是不存在的。沒有這七層的概念,只是人為的劃分而已。我們談到在任何聯網的協議時,就會談到osi 網路七層協議模型 必須遵循這個協議模型,我們的手機和電腦才可以聯網通訊,接下來我們就一起來看...