最近在專案中需要將大量存在於文字檔案中的資料批量匯入到hbase表中,並且涉及到將多個文字檔案中的資料合併到同一張hbase表中,而這些文字檔案中的字段並不是完全相同的
因為專案當中查詢資料採用的是phoenix,因此,最初想利用phoenix的bulk csv data loading來實現,但是簡單調研之後,發現並不適合我們本次的需求,後面我會補充一篇文章來對hbase的bulkload和phoenix的bulk csv data loading進行乙個簡單的對比
hbase bulk load分為兩個步驟,第乙個步驟採用mapreduce將檔案中的資料轉換成hbase內部的資料格式,第二個步驟直接將生成的storefiles匯入到hbase當中,使用bulk load導資料比直接使用hbase api能夠明顯地降低cpu和網路資源的使用率
4.1.importtsv
importtsv是乙個能夠將tsv格式的資料處理成可以直接匯入到hbase中的資料格式(storefiles)的工具,基本使用方式如下:
hadoop_classpath=
`$/bin/hbase classpath` $/bin/hadoop jar $/hbase-server
-version
.jar importtsv -dimporttsv
.columns=hbase_row_key,d:c1,d:c2 -dimporttsv
.bulk.output=hdfs://storefileoutput datatsv hdfs://inputfile
這一步執行完畢後會在hdfs的/storefile-outputdir中生成中間檔案storefiles,接著呼叫completebulkload就可以將資料最終匯入到hbase中 注:
補充幾個可選引數:
-dimporttsv.skip
.bad
.lines=false -遇到錯誤行則任務自動失敗
-dimporttsv.separator=, -自定義行內分隔符為comma
-dimporttsv.timestamp=currenttimeaslong -匯入資料時使用自定義的時間戳(基本不用)
.hadoop
.hbase
.mapreduce
4.2completebulkload
completebulkload 會將上一步生成的storefiles匯入到hbase中,匯入成功後自動刪除這些中間檔案
hadoop_classpath=`$/bin/hbase classpath`
$/bin/hadoop jar $/hbase-server-version.jar completebulkload //storefileoutput>
如果需要bulkload的資料量過大,在hbase建表的時候請提前做好合適的pre-split
6.1hbase建表語句
create 'user', '0', splits => ['1', '2', '3', '4', '5','6', '7', '8', '9']
6.2importtsv
注:6.2和6.3中的命令和jar包路徑均為hdp2.5的預設安裝位置
hadoop_classpath=
`/usr/hdp/current/hbase-master/bin/hbase classpath` /usr/hdp/current/hadoop-client/bin/hadoop jar /usr/hdp/2.5
.0.0
-1245/hbase/lib/hbase-server
-1.1
.2.2
.5.0.0-
1245.jar importtsv -dimporttsv
.separator=, -dimporttsv
.columns=hbase_row_key,0:id_name,0:id_no,0:id_type,0:user_status,0:if_receive,0:mobile_no -dimporttsv
.bulk.output=hdfs:///bulkdata/a user hdfs:///data/wb10_user1019_im.txt
6.3complete bulk loadhadoop_classpath=
`/usr/hdp/current/hbase-master/bin/hbase classpath` /usr/hdp/current/hadoop-client/bin/hadoop jar /usr/hdp/2.5
.0.0
-1245/hbase/lib/hbase-server
-1.1
.2.2
.5.0.0-
1245.jar completebulkload hdfs:///bulkdata/a user
HBase BulkLoad批量寫入資料實戰
在進行資料傳輸中,批量載入資料到hbase集群有多種方式,比如通過hbase api進行批量寫入資料 使用sqoop工具批量導數到hbase集群 使用mapreduce批量匯入等。這些方式,在匯入資料的過程中,如果資料量過大,可能耗時會比較嚴重或者占用hbase集群資源較多 如磁碟io hbase ...
封基和開基的異同
封閉式 簡稱 封基 學名叫 契約型封閉式 開放式 簡稱 開基 學名叫 契約型開放式 相同點大致有 一 都是 管理公司的集合理財產品 二 都屬於面向社會公開募集 的範疇 三 都要執行 法 和規範的會計準則 四 都要按照資產淨值提取管理費 託管費 五 目前 分紅都不需要交納個人所得稅 歡迎補充 不同點有...
Shape Basedmatching的基本流程
1 確定出roi的矩形區域 2 從roi區域提取出影象 可以先進行影象處理 3 建立模板 create shape model 金字塔級數 由numlevels 指定 值越大則 找到物體的時間 越少 anglestart 和angleextent 決定可能的旋轉範圍,anglestep指定角度範圍搜...