利用Sqoop实现Hbase的数据与MySQL数据的互导

时间:2022-06-10
本文章向大家介绍利用Sqoop实现Hbase的数据与MySQL数据的互导,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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

注意事项

  1. sqoop命令过长,为了换行,加了,在之后不要有空格,直接回车换行
  2. 如果报以下错误
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是否可以承受这么大的压力?

替代方案:

  1. 先将 hbase 的数据导出到 hdfs,然后再把数据从HDFS导入MySQL中
  2. 把Hbase表映射为hive表,然后把hive表中数据导出到MySQL中