bulk-load的做用是用mapreduce的方式將hdfs上的文件裝載到hbase中,對於海量數據裝載入hbase很是有用,參考http://hbase.apache.org/docs/r0.89.20100621/bulk-loads.html:
hbase提供了現成的程序將hdfs上的文件導入hbase,即bulk-load方式。它包括兩個步驟(也能夠一次完成): 1 將文件包裝成hfile,hadoop jar/path/to/hbase.jar importtsv -Dimporttsv.columns=a,b,c <tablename><inputdir> 好比:html Java代碼java
hadoop dfs -cat test/1spa 1 2orm 3 4xml 5 6 7 8 執行
Java代碼
hadoop jar ~/hbase/hbase-0.90.2.jar importtsv-Dimporttsv.columns=HBASE_ROW_KEY,f1 t8 test 將會啓動mapreduce程序在hdfs上生成t8這張表,它的rowkey分別爲1 35 7,對應的value爲2 4 6 8 注意,源文件默認以"\t"爲分割符,若是須要換成其它分割符,在執行時加上-Dimporttsv.separator=",",則變成了以","分割
2 在上一步中,若是設置了輸出目錄,如
Java代碼
hadoop jar ~/hbase/hbase-0.90.2.jarimporttsv -Dimporttsv.bulk.output=tmp -Dimporttsv.columns=HBASE_ROW_KEY,f1 t8test 那麼t8表還暫時不會生成,只是將hfile輸出到tmp文件夾下,咱們能夠查看tmp:
Java代碼
hadoop dfs -du tmp
Found 3 items
0 hdfs://namenode:9000/user/test/tmp/_SUCCESS
65254 hdfs://namenode:9000/user/test/tmp/_logs
462 hdfs://namenode:9000/user/test/tmp/f1
hadoop dfs -du tmp Found 3 items 0 hdfs://namenode:9000/user/test/tmp/_SUCCESS 65254 hdfs://namenode:9000/user/test/tmp/_logs 462 hdfs://namenode:9000/user/test/tmp/f1 而後執行hadoop jar hbase-VERSION.jarcompletebulkload /user/todd/myoutput mytable將這個輸出目錄中的hfile轉移到對應的region中,這一步由於只是mv,因此至關快。如: hadoop jar ~/hbase/hbase-0.90.2.jar completebulkload tmp t8 而後
Java代碼
hadoop dfs -du /hbase/t8/c408963c084d328490cc2f809ade9428
Found 4 items
124 hdfs://namenode:9000/hbase/t8/c408963c084d328490cc2f809ade9428/.oldlogs
692 hdfs://namenode:9000/hbase/t8/c408963c084d328490cc2f809ade9428/.regioninfo
0 hdfs://namenode:9000/hbase/t8/c408963c084d328490cc2f809ade9428/.tmp
462 hdfs://namenode:9000/hbase/t8/c408963c084d328490cc2f809ade9428/f1
hadoop dfs -du/hbase/t8/c408963c084d328490cc2f809ade9428 Found 4 items 124 hdfs://namenode:9000/hbase/t8/c408963c084d328490cc2f809ade9428/.oldlogs 692 hdfs://namenode:9000/hbase/t8/c408963c084d328490cc2f809ade9428/.regioninfo 0 hdfs://namenode:9000/hbase/t8/c408963c084d328490cc2f809ade9428/.tmp 462 hdfs://namenode:9000/hbase/t8/c408963c084d328490cc2f809ade9428/f1 此時己經生成了表t8 注意,若是數據特別大,而表中原來就有region,那麼會執行切分工做,查找數據對應的region並裝載
程序使用中注意: 1 由於是執行hadoop程序,不會自動查找hbase的config路徑,也就找不到hbase的環境變量。所以須要將hbase-site.xml加入到hadoop-conf變量中 2 還須要將hbase/lib中的jar包放入classpath中 3 執行以上的步驟2時須要將zookeeper的配置寫入core-site.xml中,由於在那一步時甚至不會讀取hbase-site.xml,不然會連不上zookeeper
|