我是靠谱客的博主 敏感信封,最近开发中收集的这篇文章主要介绍关系型数据库Mysql和Oracle与HBase导入导出数据,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  1. MySQL与HBase导入导出数据

环境:sqoop1.4.6+hadoop2.6+hbase1.1+mysql5.7
说明:
1.文中的导入导出的表结构借鉴了网上的某篇博客
2.mysql导入hbase可以直接通过sqoop进行
3.hbase导出到mysql无法直接进行,需要经过hive的中间作用来完成

 

  1. MySQL导出至HBase

 

a) Mysql创建表

mysql> create table test.smq_to_hbase select id,name,name grade from test.smq_mysql;

mysql> update test.smq_to_hbase set grade = '1';

mysql> Alter table test.smq_to_hbase add primary key(id);

b) Hbase创建表

hbase(main):008:0> create 'smq_hbase','info'

c) Sqoop导入hbase中

[root@master bin]# sqoop import --connect jdbc:mysql://192.168.220.20:3306/test --username root --password 123456 --table smq_to_hbase --hbase-table smq_hbase --column-family info --hbase-row-key id

 

  1. Sqoop导出hbase

 

Hbase→hive外部表→hive内部表→通过sqoop→MySQL

a) Mysql创建空表

mysql> create table test.employee(rowkey int(11),id int(11),name varchar(20),primary key (id));

 

b) hbase创建内部表

hbase(main):001:0> create 'employee','info'

hbase(main):002:0> put 'employee',1,'info:id',1

hbase(main):003:0> put 'employee',1,'info:name','peter'

hbase(main):004:0> put 'employee',2,'info:id',2

hbase(main):005:0> put 'employee',2,'info:name','paul'

c) hive创建外部表

CREATE EXTERNAL TABLE test.h_employee (key int,id int,name string)

   STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

   WITH SERDEPROPERTIES (

    "hbase.columns.mapping" =

     ":key,info:id, info:name"

   )

   TBLPROPERTIES( "hbase.table.name" = "employee",

    "hbase.mapred.output.outputtable" = "employee");

d) hive创建内部表

hive> CREATE TABLE test.employee(key INT,id INT,name STRING);

e) hive外部表的数据导入内部表中

hive> insert overwrite table test.employee select * from test.h_employee;

f) sqoop导出hive表至mysql中

[root@master bin]# sqoop export -connect jdbc:mysql://192.168.220.20:3306/test -username root -password 123456  -tablemployee -export-dir /user/hive/warehouse/test.db/employee --input-fields-terminated-by '01' --input-null-string '\N' --input-null-non-string '\N';

 

  1. 将ORACLE数据导入HBase
  2. 简介及部分重要参数介绍

        Sqoop除了能够将数据从关系型数据库导入到HDFS和Hive中,还能够导入到HBase表中。

       --hbase-table:通过指定--hbase-table参数值,指明将数据导入到HBase表中,而不是HDFS上的一个目录。输入表中的每一行将会被转换成一个HBase Put操作的输出表的一行。

       --hbase-row-key:你可以使用--hbase-row-key参数,手动的指定row key。默认的情况下,Sqoop会将split-by 列作为HBase rowkey列。如果没有指定split-by值,它将会试图识别关系表的关键字。

       如果源表是组合关键字,--hbase-row-key 参数后面值是用逗号分隔的组合关键字属性的列表,在这样种情况下,通过合并组合关键字属性的值来产生HBase的Row key,每个值之间使用下划线分隔开来。

       --column-family:必须指定--column-family参数,每一个输出列都会被放到同一个family列族中。 

      --hbase-create-table:如果HBase中的目标表和列族不存在,如果你使用该参数,Sqoop在运行任务的时候会根据HBase的默认配置,首先创建目标表和列族。

       注意一:当源表中是组合关键字的时候,必须手动指定--hbase-row-key参数,Sqoop才能将数据导入到HBase中,否则不行。

       注意二:如果HBase中的目标表和列族不存在,如果没加--hbase-create-table参数,Sqoop job将会报错误退出运行。所以你在将数据从源表导入到HBase之前,需要首先在HBase中创建目标表和其对应的列族。

      Sqoop目前会序列化所有的字段值,将值转换为字符串表示,然后向HBase中插入UTF-8编码的字符串值的二进制值。

 

  1. 原始数据如下

 

其中id是主键

  1. 以单关键字作为Rowkey导入

sqoop import --append --connect jdbc:oracle:thin:@219.216.110.120:1521:orcl --username TEST1 --password test1 --table TEST1 --columns age  --hbase-table test1 --hbase-row-key id --column-family personinfo

hbase(main):005:0> scan 'test1'

ROW  COLUMN+CELL                                              

 1   column=personinfo:name, timestamp=1462411628085, value=xE

                      5xBCxA0xE4xB8x89                                    

 1   column=personinfo:sex, timestamp=1462411628085, value=xE7

                      x94xB7                                                 

 2   column=personinfo:name, timestamp=1462411628085, value=xE

                      6x9Dx8ExE5x9Bx9B                                     

 2   column=personinfo:sex, timestamp=1462411628085, value=xE5

                      xA5xB3                                                 

 3   column=personinfo:name, timestamp=1462411625239, value=xE

                      7x8Ex8BxE4xBAx94                                    

 4   column=personinfo:name, timestamp=1462411623526, value=xE

                      8xB5xB5xE5x85xAD                                    

 4   column=personinfo:sex, timestamp=1462411623526, value=xE7

                      x94xB7                                                 

 5     column=personinfo:name, timestamp=1462411628403, value=xE

                      7x94xB0xE4xB8x83                                     

 5     column=personinfo:sex, timestamp=1462411628403, value=xE5

                      xA5xB3                                                 

 6     column=personinfo:name, timestamp=1462411628403, value=xE

                      7x8Ex8BxE5x85xAB                                    

6 row(s) in 0.4110 seconds

  1. 手动指定Rowkey

建立test2表,演示手动指定Rowkey的情形。我们以id+name组合表示RowKey,如下:

sqoop import --append --connect jdbc:oracle:thin:@219.216.110.120:1521:orcl --username TEST1 --password test1 --table TEST1 --columns id,name,sex,age --hbase-create-table --hbase-table test2 --hbase-row-key id,name --column-family personinfo

查看结果:

hbase(main):006:0> scan 'test2'

ROW   COLUMN+CELL                                              

 1_xE5xBCxA0xE4x column=personinfo:age, timestamp=1462413115207, value=20B8x89

 1_xE5xBCxA0xE4x column=personinfo:sex, timestamp=1462413115207, value=xE7 B8x89x94xB7

 2_xE6x9Dx8ExE5x column=personinfo:age, timestamp=1462413115207, value=259Bx9B                                                                        

 2_xE6x9Dx8ExE5x column=personinfo:sex, timestamp=1462413115207, value=xE59Bx9BxA5xB3                                                 

 3_xE7x8Ex8BxE4x column=personinfo:age, timestamp=1462413102229, value=65 BAx94                                                                        

 4_xE8xB5xB5xE5x column=personinfo:sex, timestamp=1462413115746, value=xE7 85xADx94xB7                                                 

 5_xE7x94xB0xE4x column=personinfo:age, timestamp=1462413120206, value=45B8x83                                                                     

 5_xE7x94xB0xE4x column=personinfo:sex, timestamp=1462413120206, value=xE5 B8x83xA5xB3                                                 

5 row(s) in 0.1520 seconds

由上可知,数据也成功导入到了HBase中,且Rowkey为id号+name列值的二进制值的组合。Rowkey列之间值是以下划线分隔的。

最后

以上就是敏感信封为你收集整理的关系型数据库Mysql和Oracle与HBase导入导出数据的全部内容,希望文章能够帮你解决关系型数据库Mysql和Oracle与HBase导入导出数据所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部