linux中将hdfs数据导入hbase,bulk-load装载hdfs数据到hbase配置(绝对可行)

本帖最后由 pqm1989 于 2013-3-15 09:00 编辑

hbase提供了现成的程序将hdfs上的文件导入hbase,即bulk-load方式。它包括两个步骤(也可以一次完成):

第一部分:

程序环境:hadoop版本1.0.3,hbase版本0.94.1

程序使用中注意:

1 因为是执行hadoop程序,不会自动查找hbase的config路径,也就找不到hbase的环境变量。因此需要将hbase-site.xml加入到hadoop-conf变量中 (我们直接把hbase-site.xml 复制到hadoop的conf目录下)

2 把$HBASE_HOME/lib下的hbase-0.92.1.jar,zookeeper-3.4.3.jar,guava-r09.jar,protobuf-java-2.4.0a.jar(网上很多是对于老版本的hadoop,故没有protobuf这个包)复制到$HADOOP_HOME/lib下

3.配置$HADOOP_HOME下的conf/core-site.xml,加入如下信息

hbase.zookeeper.quorum

secmaster

4.重启hbase和hadoop

第二部分:

1 将文件包装成hfile,hadoop jar /path/to/hbase.jar importtsv -Dimporttsv.columns=a,b,c

比如:

1.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 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

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:

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 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.jar completebulkload /user/todd/myoutput mytable将这个输出目录中的hfile转移到对应的region中,这一步因为只是mv,所以相当快。如:

hadoop jar ~/hbase/hbase-0.90.2.jar completebulkload tmp t8

然后

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

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并装载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值