1. MySQL数据导入到HBase中
在服务器(主机名为repo)的mysql数据库中的”test”库中有一张”student”表,其中内容如下:
sid sname sage
1 Tom 15
2 Jack 16
3 Tony 17
4 Bob 18
现在利用sqoop把这张表中的数据导入到hbase中的”h_student”表中
sqoop import \
--connect jdbc:mysql://repo/test \
--username root \
--password root \
--table student \
--hbase-table h_student \
--column-family info \
--hbase-row-key sid \
--hbase-create-table
sqoop命令中的配置的意思:
--connect jdbc:mysql://repo/test \
--username root \
--password root \
--table student \
--hbase-table h_student \
--column-family info \ # 指定hbase表的列族名
--hbase-row-key sid \ # 指定hbase表的rowkey对应为mysql表的sid
--hbase-create-table # 自动在hbase数据库中创建"h_student"这张表
导入数据后”h_student”表中内容:
1 column=info:sage, timestamp=1516189524784, value=15
1 column=info:sname, timestamp=1516189524784, value=Tom
2 column=info:sage, timestamp=1516189524784, value=16
2 column=info:sname, timestamp=1516189524784, value=Jack
3 column=info:sage, timestamp=1516189524784, value=17
3 column=info:sname, timestamp=1516189524784, value=Tony
4 column=info:sage, timestamp=1516189525029, value=18
4 column=info:sname, timestamp=1516189525029, value=Bob
5 column=info:sage, timestamp=1516189525029, value=55
注意事项
- sqoop命令过长,为了换行,加了
\
,在\
之后不要有空格,直接回车换行 - 如果报以下错误
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.hbase.HTableDescriptor.addFamily(Lorg/apache/hadoop/hbase/HColumnDescriptor;)
说明hbase与sqoop版本不兼容,无法自动创建”h_student”表,你需要手动在hbase表中创建”h_student”表,然后再运行sqoop命令就可以成功
hbase(main):001:0> create 'h_student','info'
2. HBase表中数据导入到MySQL中
目前没有命令可以直接将 hbase 中的数据导出到 mysql,原因:hbase是大数据生态圈的组件,就是为了存放大数据,直接导出到MySQL,MySQL是否可以承受这么大的压力?
替代方案:
先将 hbase 的数据导出到 hdfs,然后再把数据从HDFS导入MySQL中
把Hbase表映射为hive表,然后把hive表中数据导出到MySQL中