Hbase - 表导出CSV数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hbase - 表导出CSV数据相关的知识,希望对你有一定的参考价值。

参考技术A 考查了Hbase的各种MR,没有发现哪一个是能实现的,如果有请通知我,我给他发红包。
所以我们只能自己来写一个MR了,编写一个Hbase的MR,官方文档上也有相应的例子。
我们用来加以化妆就得到我们想要的了。

导出的CSV格式为

依赖 hbase-mapreduce

定义Map转换类

定义Reducer类

ExportCsv核心

要跑了任务了

HBase表的数据导出和导入

1. 表数据导出

hbase org.apache.hadoop.hbase.mapreduce.Export test file:///home/hadoop/test (导入到本地)

hbase org.apache.hadoop.hbase.mapreduce.Export test /user/hadoop/test (导入到hdfs上)

#创建一个test表,一个列簇info
hbase(main):004:0* create ‘test‘,‘info‘
0 row(s) in 4.3820 seconds

=> Hbase::Table - test
hbase(main):005:0> put ‘test‘,‘001‘,‘info:name‘,‘tom‘
0 row(s) in 0.4710 seconds

hbase(main):006:0> put ‘test‘,‘001‘,‘info:age‘,‘18‘
0 row(s) in 0.0490 seconds

hbase(main):007:0> put ‘test‘,‘002‘,‘info:name‘,‘jerry‘
0 row(s) in 0.0490 seconds

hbase(main):008:0> put ‘test‘,‘002‘,‘info:age‘,‘19‘
0 row(s) in 0.0350 seconds

我们将test表导入到hdfs中

[[email protected] ~]$ hbase org.apache.hadoop.hbase.mapreduce.Export  test  /user/hadoop/test

该命令会启动一个mapreduce程序来完成数据的导出,等待程序执行完成,查看导出后的文件

[[email protected] ~]$ hdfs dfs -ls /user/hadoop/test
Found 2 items
-rw-r--r--   3 hadoop supergroup          0 2018-05-17 21:33 /user/hadoop/test/_SUCCESS
-rw-r--r--   3 hadoop supergroup        284 2018-05-17 21:33 /user/hadoop/test/part-m-00000
[[email protected] ~]$ 

注意:上面以part-m开头的文件就是导出的数据文件,我们可以看下它的内容

[[email protected] ~]$ hdfs dfs -cat /user/hadoop/test/part-m-00000
SEQ1org.apache.hadoop.hbase.io.ImmutableBytesWritable%org.apache.hadoop.hbase.client.ResultP
l7D~UL001D

001infoage 218

001infoname 2tom (N002F

002infoage 219
!
002infoname 2jerry (

2. 导入数据

导入数据前,一定要在hbase上创建同名表,否则会报错,找不到表

hbase org.apache.hadoop.hbase.mapreduce.Import test file:///home/hadoop/test (从本地导入)

hbase org.apache.hadoop.hbase.mapreduce.Import test /user/hadoop/test (从hdfs上导入)

# 先删除之前的test表,然后重新创建
hbase(main):004:0> disable ‘test‘
0 row(s) in 2.2780 seconds

hbase(main):006:0> drop ‘test‘
0 row(s) in 1.3260 seconds

#重新创建test表
hbase(main):016:0* create ‘test‘,‘info‘
0 row(s) in 1.2400 seconds

=> Hbase::Table - test

执行命令导入数据,导入目录一定要是数据文件所在目录

[[email protected] ~]$ hbase org.apache.hadoop.hbase.mapreduce.Import  test  /user/hadoop/test

和导出命令类似,该命令同样会启动一个mapreduce任务来完成数据的导入,之后我们进入hbase shell查看数据是否导入了

hbase(main):020:0* scan ‘test‘
ROW                                 COLUMN+CELL                                                                                         
 001                                column=info:age, timestamp=1526563694645, value=18                                                  
 001                                column=info:name, timestamp=1526563629119, value=tom                                                
 002                                column=info:age, timestamp=1526563723288, value=19                                                  
 002                                column=info:name, timestamp=1526563706773, value=jerry                                              
2 row(s) in 0.1570 seconds

可以看到,数据已经成功导入。

另外,我在将数据导出到本地,然后再导入到hbase中时,两个mapreduce任务执行均出现了报错,但是数据导出和导出成功了,而且数据没有丢失,尚未搞清楚,待摸索中~~










以上是关于Hbase - 表导出CSV数据的主要内容,如果未能解决你的问题,请参考以下文章

HBase表的数据导出和导入

如何把SQLServer表数据导出CSV文件

如何用hive查询hbase中的数据

批量导出表数据到CSV文件

BulkLoad加载本地文件到HBase表

将数据库表(带 BLOB)导出为 CSV