摘要載入資料到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資料寫路徑
在put資料時會先將資料的更新操作資訊和資料資訊寫入wal,在寫入到wal後,資料就會被放到memstore中,當memstore滿後資料就會被flush到磁碟(即形成hfile檔案),在這過程涉及到的flush,split,compaction等操作都容易造成節點不穩定,資料匯入慢,耗費資源等問題,在海量資料的匯入過程極大的消耗了系統效能,
避免這些問題最好的方法就是使用blukload的方式來載入資料到hbase中。 原理
利用hbase資料按照hfile格式儲存在hdfs的原理,使用mapreduce直接生成hfile格式檔案後,regionservers再將hfile檔案移動到相應的region目錄下
其流程如下圖:
匯入過程
1.使用mapreduce生成hfile檔案
generatehfile類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public
class
generatehfile
extends
text, immutablebyteswritable, put>
}
generatehfilemain類 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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檔案
1
2
3
4
5
6
7
8
public
class
loadincrementalhfiletohbase
}
由於blukload是繞過了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...
通過BulkLoad的方式快速匯入海量資料
摘要 載入資料到hbase的方式有多種,通過hbase api匯入或命令列匯入或使用第三方 如sqoop 來匯入或使用mr來批量匯入 耗費磁碟i o,容易在匯入的過程使節點宕機 但是這些方式不是慢就是在匯入的過程的占用region資料導致效率低下,今天要講的就是利用hbase在hdfs儲存原理及ma...
通過「表白」的方式,讓我們快速了解網路協議
本章主要介紹網路協議,這個協議就叫做osi協議 一系列協議 按照功能不同,分工不同,人為的分層七層。實際上這個七層是不存在的。沒有這七層的概念,只是人為的劃分而已。我們談到在任何聯網的協議時,就會談到osi 網路七層協議模型 必須遵循這個協議模型,我們的手機和電腦才可以聯網通訊,接下來我們就一起來看...