bulk-load裝載hdfs數據到hbase小結


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/1  
    node

  • 1       2  
    apache

  • 3       4  
    微信

  • 5       6  
    oop

  • 7       8  
    學習

  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  

  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.jar importtsv -Dimporttsv.bulk.output=tmp -Dimporttsv.columns=HBASE_ROW_KEY,f1 t8 test  

   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

更多精彩內容請關注:http://bbs.superwu.cn

關注超人學院微信二維碼:

 

關注超人學院java免費學習交流羣:

相關文章
相關標籤/搜索