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数据的主要内容,如果未能解决你的问题,请参考以下文章