- HBase client API
- MapReduce(Ex:TableOutputFormat)
- Bulkload
為什麼要選擇 Bulkload ?
- Bulkload 是利用 MapReduce 的方式直接產生 HFile 並將其載入到運行中的 Cluster
Bulkload 的好處
- 利用較少的 CPU 與 網路資源,因此速度較快
HBase Bulkload 的流程包含兩個步驟
1. Preparing data via a MapReduce job
- 可以利用 Importtsv tool
- 自行撰寫 MapReduce 程式去產生 HFile
2. Completing the data load
- 可以利用 completebulkload tool
- 自行撰寫 Java 程式利用 LoadIncrementalHFiles
Importtsv 是 HBase 提供的一支 tool 可以讓你透過 command 的方式執行 Bulkload
執行 importtsv 的方式:
hadoop jar $HBASE_HOME/hbase-0.94.6.jar importtsv
importtsv 的一些參數
- -Dimporttsv.skip.bad.lines = false
遇到 Bad line 的情況會 Pass,Bad line的情況有: No delimiter、Excessive columns、No row key
- '-Dimporttsv.separator = |'
設定資料欄位間的分隔符號為 |,注意:要用單引號括住
- -Dimporttsv.timestamp = currentTimeAsLong
設定資料的timestamp
- -Dimporttsv.mapper.class = my.Mapper
可以運行你的 Mapper,而不是跑預設的 Mapper
- -Dimporttsv.columns=HBASE_ROW_KEY,cf:col1,cf:col2
指定到資料的欄位,用逗號做分隔,以上寫法代表檔案有三個欄位
第一個欄位是 Row key,後面兩個欄位分別是 cf:col1 與 cf:col2
- -Dimporttsv.bulk.output=/path/for/output
指定 HFile 產生的路徑(HDFS),如果不給此參數則 Bulkload 預設就
直接將資料 Put 到HBase
以下為一個 Importtsv + completebulkload 來完成一次 Bulkload
hadoop jar $HBASE_HOME/hbase-0.94.6.jar importtsv
-Dimporttsv.columns=HBASE_ROW_KEY,<columnFamily>,…
-Dimporttsv.skip.bad.line=true
'-Dimporttsv.separator=|'
-Dimporttsv.bulk.output= <Output path>
<table name> <Source file path>
hadoop jar $HBASE_HOME/hbase-0.94.6.jar completebulkload <Output path> <table name>
沒有留言:
張貼留言