MySql与HBase之间数据的互导(借助sqoop)

在进行下面的步骤之前,请确保你的hadoop,hbase,hive,mysql,sqoop已经安装配置完好

此处我的配置如下:

hadoop-1.2.1

hbase-0.94.18

hive-0.12.0

mysql-5.5.37

sqoop-1.4.4

一.将mysql中的数据导入到hbase中,这一步相对来说是比较简单的

1.在mysql中建立一个teacher表,插入5组数据,我这里没有将表建立的太大,可以根据自身数据大小情况改变创建表的大小,表的结构如下图所示:

104040_GAwI_1866370.png

2.在进行下一步之前,一定要确认mysql的jdbc已经拷贝到sqoop的lib目录下,此处我使用的是 mysql-connector-java-5.0.8-bin.jar,同时需要拷贝hbase目录下的hbase-0.94.18.jar和hbase的lib目录下的zookeeper-3.4.5.jar到sqoop的lib目录下,以上jar包,只要是适合自己版本的就好。

3.转到sqoop的目录下,执行命令:

$bin/sqoop import --connect jdbc:mysql://slave03/sqoop --username sqoop --password sqoop --table teacher --hbase-table myteacherhbase  --column-family info --hbase-create-table

上述命令行的含义:

$bin/sqoop import --connect jdbc:mysql://slave03(自己的机器名,可以是自己机器的ip地址)/sqoop(mysql中的database) --username 用户名 --password 密码 --table teacher(mysql中的table名字) --hbase-table myteacherhbase(导入到hbase中表的名字)  --column-family info --hbase-create-table(使hbase自己创建表)

4.1执行上述命令之前hbase中表的状况:

111213_yrv0_1866370.png

4.2执行sqoop命令之后hbase里边表的状况:

111433_Wgow_1866370.png

5.至此,mysql数据库中的数据导入到hbase中成功。


二.将hbase中的数据导出到mysql数据库中。

因为之前在网上查找过很多的信息,了解到hbase中的数据不能够直接导出到mysql数据库中,所以只能借助一个中介实现这个目的,我了解到有以下两种方法可以实现这个功能:

(1)将hbase中的数据导出到HDFS平台上,然后导入到mysql(此方法本人还没有试,只是了解到网上有人说可以)

(2)将hbase中的数据导出到hive(中介),然后通过sqoop将hive中的数据导入到mysql数据库中。

接下来,我介绍第二种方法:

  1. 因为之前将mysql中的teacher表导入到了hbase,我就直接用hbase中的这个myteacherhbase表进行以下操作。

  2. 在mysql中新建立一个myteacher表,用来接收hbase导出的数据。

    表结构如图:

    113040_RZsp_1866370.png

  3. 在hive中创建连接hbase的外部表:


  4. hive> create external table myteacher_external(key int,value string)
        > STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
        > WITH SERDEPROPERTIES ("hbase.columns.mapping" = "info:name")
        > TBLPROPERTIES("hbase.table.name" = "myteacherhbase");

这里我直接在创建外部表的时候指定了primary key,将id设为primary key.如图:

114637_RwLV_1866370.png

可以查询到hbase中的数据,创建连接hbase外部表成功。

5.    在hive中新建一个内部表,将hive的external外部表数据导入到内部表。

hive>create table myteacher_inner(id int,name string);

建好之后,通过以下命令,执行将hbase中的数据导出到hive中:

hive> insert overwrite table myteacher_inner select * from myteacher_external;

如下图:

120155_r8v4_1866370.png

相应的内部表中有了数据,说明hbase导出到hive中成功了。

6.    接下来,就是利用sqoop将hive中的数据导入到mysql中了,转到sqoop目录下,执行以下命令:

bin/sqoop export --connect jdbc:mysql://本机ip/sqoop --username sqoop --password sqoop  -m 1 --table myteacher --export-dir hdfs://slave03:9000/home/hadoop/hive/warehouse/myteacher_inner --input-null-string "\\\\N" --input-null-non-string "\\\\N" --input-fields-terminated-by "\\01" --input-lines-terminated-by "\\n"

说明:ip地址之后的sqoop是mysql的database,之后依次是用户名,密码,m 1 是进行一次map,table myteacher是之前建立的接收hbase数据的空表,后边的--export-dir是本机的hive之中表的HDFS地址。至于这地址之后的,是处理防止导入到mysql之中时,出现NULL的现象,导致原因是因为hive里存储的数据和数据之间的间隔与mysql中存储的数据和数据间隔不一致。所以需要处理一下。使mysql可以识别。

122354_2Tsm_1866370.png

sqoop执行命令成功。

7.    在mysql查看myteacher中的数据。

122649_ym0i_1866370.png

查询成功。导入成功,操作完成啦!

8.感悟:

之前一直做hbase导出到mysql,以为这一步是实现不了的,一直查资料,一直改,最终成功了,虽然可能还有很多的错误处,也可能好多地方介绍的不清楚,请大家多多批评。

最后说一句:千万别放弃,你可以的!

我们是:数据的开拓者,QQ群号:248087140

转载于:https://my.oschina.net/dataRunner/blog/304274

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值