[HBase] bulk-load装载hdfs数据到hbase小结

介绍了HBase中bulk-load的功能及使用方法,适用于大规模数据导入。通过两步操作:首先利用MapReduce将文件转换为HFile,其次快速将HFile加载至对应Region。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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> 
比如: 
Java代码 
  1. hadoop dfs -cat test/1  
  2. 1       2  
  3. 3       4  
  4. 5       6  
  5. 7       8  

执行 
Java代码 
  1. hadoop jar ~/hbase/hbase-0.90.2.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,f1 t8 test  

将会启动mapreduce程序在hdfs上生成t8这张表,它的rowkey分别为1 3 5 7,对应的value为2 4 6 8 
注意,源文件默认以"\t"为分割符,如果需要换成其它分割符,在执行时加上-Dimporttsv.separator=",",则变成了以","分割 

2 在上一步中,如果设置了输出目录,如 
Java代码 
  1. hadoop jar ~/hbase/hbase-0.90.2.jar importtsv -Dimporttsv.bulk.output=tmp -Dimporttsv.columns=HBASE_ROW_KEY,f1 t8 test  

那么t8表还暂时不会生成,只是将hfile输出到tmp文件夹下,我们可以查看tmp: 
Java代码 
  1. hadoop dfs -du tmp  
  2. Found 3 items  
  3. 0           hdfs://namenode:9000/user/test/tmp/_SUCCESS  
  4. 65254       hdfs://namenode:9000/user/test/tmp/_logs  
  5. 462         hdfs://namenode:9000/user/test/tmp/f1  

然后执行hadoop jar hbase-VERSION.jar completebulkload /user/todd/myoutput mytable将这个输出目录中的hfile转移到对应的region中,这一步因为只是mv,所以相当快。如: 
hadoop jar ~/hbase/hbase-0.90.2.jar completebulkload tmp t8 
然后 
Java代码 
  1. hadoop dfs -du /hbase/t8/c408963c084d328490cc2f809ade9428  
  2.     Found 4 items  
  3.     124         hdfs://namenode:9000/hbase/t8/c408963c084d328490cc2f809ade9428/.oldlogs  
  4.     692         hdfs://namenode:9000/hbase/t8/c408963c084d328490cc2f809ade9428/.regioninfo  
  5.     0           hdfs://namenode:9000/hbase/t8/c408963c084d328490cc2f809ade9428/.tmp  
  6.     462         hdfs://namenode:9000/hbase/t8/c408963c084d328490cc2f809ade9428/f1  

此时己经生成了表t8 
注意,如果数据特别大,而表中原来就有region,那么会执行切分工作,查找数据对应的region并装载 

        程序使用中注意: 

1 因为是执行hadoop程序,不会自动查找hbase的config路径,也就找不到hbase的环境变量。因此需要将hbase-site.xml加入到hadoop-conf变量中 

本例将hbase-site.xml 复制到$HADOOP_HOME/conf下

2 还需要将hbase/lib中的jar包放入classpath中 

本例将hbase/lib 中的jar包放入 $HADOOP_HOME/lib下

3 执行以上的步骤2时需要将zookeeper的配置写入core-site.xml中,因为在那一步时甚至不会读取hbase-site.xml,否则会连不上zookeeper 。

本例在core-site.xml中添加以下内容

<property>
    <name>hbase.zookeeper.quorum</name>
    <value>master,slave1,slave2</value>
  </property>


本文出自:http://koven2049.iteye.com/blog/982831

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值