分享

利用ImportTsv,completebulkload,Import导入HBase 0.96.0

本帖最后由 pig2 于 2014-10-13 23:34 编辑

问题导读

1.你所了解的HBase 0.96.0 的数据导入有几种方式?
2.利用ImportTsv导入数据需要哪些步骤?
3.如何利用completebulkload 将数据导入到HBase?







记录一下HBase 0.96.0 利用ImportTsv,completebulkload 和Import导入数据的方法。我的环境里用的是Yarn。

1、利用ImportTsv 将cvs文件导入到HBase
步骤:

a. 在hbase里面创建好table:

命令:create 'hbase-tbl-001','cf'
b. Upload simple1.cvs文件到hdfs上面,其内容为:
1,"tom"
2,"sam"
3,"jerry"
4,"marry"
5,"john"

c. 利用ImportTsv导入数据:
命令:bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," -Dimporttsv.columns=HBASE_ROW_KEY,cf hbase-tbl-001 /user/biadmin/simple1.cvs
ImportTsv 任务执行结果:

1.jpg


在Yarn的web console上可以看到相应job的执行记录:

2.jpg



hbase的hbase-tbl-001'的值为:

3.jpg



2、利用completebulkload 将数据导入到HBase
a. 先通过ImportTsv生成HFile
命令:bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," -Dimporttsv.bulk.output=hfile_tmp3 -Dimporttsv.columns=HBASE_ROW_KEY,cf hbase-tbl-003 /user/biadmin/simple1.cvs
该命令会最终通过MapReduce job完成:

4.jpg


此时,可以在hdfs上面看到生成的HFile:

5.jpg


而且, 在hbase上也自动创建了表hbase-tbl-003,不过该表此时为空表:

6.jpg


b. 通过completebulkload 将数据导入表hbase-tbl-003
命令: hadoop jar lib/hbase-server-0.96.0.jar completebulkload hfile_tmp3 hbase-tbl-003
注意:执行该命令时,hadoop很可能会找不到相关的hbase依赖包,出现ClassNotFoundException的异常。一个简单的解决方法是将hbase相关的jar包都放到${HADOOP_HOME}/share/hadoop/common/lib下面,这样hadoop就能在运行前加载相关的hbase jar files。
运行该命令的本质是一个hdfs的mv操作,并不会启动MapReduce。
执行完后,表hbase-tbl-003里面就有了新导入的数据:

7.jpg



3、利用Import将数据导入到HBase

注:具体的一些实验在下文:(HBase导出CSV格式数据的方法)中有详细描述,这里说一下具体步骤。
a. HBase export工具导出的数据的格式是sequence file。比如,在执行完命令“bin/hbase org.apache.hadoop.hbase.mapreduce.Export test test-output-001”后,hbase会启动一个MapReduce作业,作业完成后会在hdfs上面会生成sequence file格式的数据文件
b. 对于这类Sequence file格式的数据文件,HBase是可以通过Import工具直接将它导入到HBase的表里面的。执行命令“bin/hbase org.apache.hadoop.hbase.mapreduce.Import test-01 test-output-001”,随后hbase会启动一个MapReduce 作业。然后 表test-01中会成功导入数据。




已有(11)人评论

跳转到指定楼层
howtodown 发表于 2014-10-13 17:56:29
HBase导出CSV格式数据的方法


本文的测试环境为hbase-0.96.0 + yarn(hadoop-2.0.3-alpha) + pig-0.12.0。在测试前,先创建了一张名为test的hbase表,它内容非常简单,就只有一行数据:

1.jpg


HBase export工具导出的数据的格式是sequence file。比如,在执行完命令“bin/hbase org.apache.hadoop.hbase.mapreduce.Export test test-output-001”后,hbase会启动一个MapReduce作业,作业完成后会在hdfs上面会生成sequence file格式的数据文件:

2.jpg


当然,对于这类Sequence file格式的数据文件,HBase是可以直接将它导入到HBase的表里面的。
比如,我们创建另外一张hbase空表,名为test-01。命令为:“create 'test-01','cf'”。此时,表test-01的内容为空。
然后,执行命令“bin/hbase org.apache.hadoop.hbase.mapreduce.Import test-01 test-output-001”,随后hbase会启动一个MapReduce 作业:

3.jpg


此时,我们可以看到表test-01中已经成功导入了数据:


4.jpg


如果想从HBase中直接导出CSV格式的数据文件,可以借助Pig。步骤为:

a) 编辑名为ExportHbase.pig的文件:
REGISTER ${HBASE_HOME}/lib/htrace-core-2.01.jar;
REGISTER ${PIG_HOME}/contrib/piggybank/java/piggybank.jar;
x = LOAD 'hbase://test' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('cf:c1');
STORE x INTO 'test-tbl-data.csv' USING PigStorage('$');

b) 执行命令“bin/pig -x mapreduce ExportHbase.pig”,然后Pig会启动一个MapReduce job,执行完毕后会在hdfs上生成CSV格式的数据:

5.jpg


除了利用Pig,还可以用别的方法从HBase 导出CSV格式的数据:
- 编写Java程序,调用HBase API。

- 把HBase生成的Sequence file转化成CSV格式的文件




回复

使用道具 举报

dylanld 发表于 2015-1-6 16:34:12
您好。我现在从hbase-0.94导出数据,再导入到hbase-0.98里。用hadoop distcp已经把数据传到hbase0.98所在集群了。数据都一样的。用hbase org.apache.hadoop.hbase.mapreduce.Import 命令导入时,Mapreduce也正常成功的。可hbase表里就是没数据。啥原因。折腾很久了。
回复

使用道具 举报

pig2 发表于 2015-2-13 11:06:19
dylanld 发表于 2015-1-6 16:34
您好。我现在从hbase-0.94导出数据,再导入到hbase-0.98里。用hadoop distcp已经把数据传到hbase0.98所在集 ...

那就是没有导入成功,仔细检查程序
回复

使用道具 举报

laneypeng 发表于 2015-3-19 13:18:47
刚刚初学,导入数据到hbase,查看你的文章解决我的一些问题,很感谢!
回复

使用道具 举报

laneypeng 发表于 2015-3-19 13:19:26
回复

使用道具 举报

随风而逝 发表于 2015-7-25 22:55:29
我的一直报这个错误是咋回事啊?ERROR: One or more columns in addition to the row key and timestamp(optional) are required
回复

使用道具 举报

随风而逝 发表于 2015-7-25 23:06:20
D:\6.png
回复

使用道具 举报

随风而逝 发表于 2015-7-25 23:13:16
版主您的qq多少,向您请教一下,我照着做的出问题,一直报错ERROR: One or more columns in addition to the row key and timestamp(optional) are required
回复

使用道具 举报

随风而逝 发表于 2015-7-26 00:31:55
现在又开始报这个错,我真是崩溃了 Exception in thread "main" org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://nn1.hcbss:8020/user/hdfs/
回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条