2014年6月21日 星期六

【HBase】Bulkload

HBase 包含了數種方式將資料到入HBase
  •         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> 






沒有留言:

張貼留言