bulk-load装载hdfs数据到hbase的示例分析

这篇文章给大家分享的是有关bulk-load装载hdfs数据到hbase的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

成都创新互联于2013年创立,是专业互联网技术服务公司,拥有项目网站设计、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元月湖做网站,已为上家服务,为月湖各地企业和个人服务,联系电话:18980820575

bulk-load的作用是用mapreduce的方式将hdfs上的文件装载到hbase中,对于海量数据装载入hbase非常有用

hbase提供了现成的程序将hdfs上的文件导入hbase,即bulk-load方式。它包括两个步骤(也可以一次完成): 
1 将文件包装成hfile,hadoop jar/path/to/hbase.jar importtsv -Dimporttsv.columns=a,b,c  
比如:

Java代码


  • hadoop dfs -cat test/1  

  • 1       2  

  • 3       4  

  • 5       6  

  • 7       8  

  hadoop dfs -cat test/1

  1       2

  3       4

  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

感谢各位的阅读!关于“bulk-load装载hdfs数据到hbase的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!


本文名称:bulk-load装载hdfs数据到hbase的示例分析
分享链接:http://pwwzsj.com/article/gosphh.html