Hbase和Mysql文件互相导入

7 篇文章 0 订阅
5 篇文章 0 订阅
以下的步骤都是我实验成功后的记录下来的,只记录了大体的步骤,由于环境的差异,可能导致你的操作并不一定会成功!不要机械的式的复制,要结合你本机的环境去处理。对于配置选项,有些我也不抬理解,待理解之后再来补充。
实验环境:
Linux 16.04.3
hadoop-2.8.1
hbse-1.2.6
hive-2.2.0
sqoop-1.4.6.bin__hadoop-2.0.4-alpha

一、从MySQL将表导入到Hbase中 
从MySQL可以直接将表导入到Hbase之中,需要事先在Hbase中建立表. 
语法:sqoop import --connect conectPath/databaseName --table tableName --username userName --password useNamePassword --bindir path --split-by columnName --hbase-table hbaseTableName --column-family columnFamilyName 
需要根据你自己的具体信息填入相关信息。 
举个例子:sqoop import --connect jdbc:mysql://localhost/jt --table gps --username root --password 123456 --bindir /home/test/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib --split-by id --hbase-table gps --column-family info 
我遇到的错误:某某类找不到 
原因:在导入的过程之中会生成一个类,class文件和jar文件。在执行mapreduce的时候没有找到这些文件。 
解决办法:找到这些文件复制到SQOOP_HOME/lib 目录下。我通过--bindir 来设置这些文件输出的目录 
二、从Hbase导入MySQL数据库 
该过程需要借助Hive,需要使用Hive的托管表和外部表。 
1、在mysql在建立相应的表

create table employee(
rowkey int(11) not null,
id int(11) not null,
name varchar(20)
)charset=utf8;

2、在Hbase中建立相应的表,并插入数据 
建表语句: create 'employee','info' 
插入语句:put 'employee',1,'info:if',1 
put 'employee',1,'info:name','tom' 
put 'employee',2,'info:id',2 
put 'employee',2,'info:name','mike' 
3、建立Hive的外部表 
建表语句:

create table 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");

4、建立Hive的托管表

create table h_employee_export( key int, id int, name string  )
row format delimited fields terminated by '\054'

其中`row format delimited fields terminated by '\054'` 表示Hive托管表中字段之间的分隔符,`\054` 是八进制表示形式,十进制为44,ascii为44的符号为逗号。可以改变为其他的符号。

5、将外部表(h_employee)导入到托管表(h_employee_export)

insert overwrite table h_employee_export select * from h_employee;
  •  

6、从Hive托管表(h_employee_export)导入到MySQL

“` 
sqoop export –connect jdbc:mysql://localhost:3306/ly –username root –password 0987654321 –table employee –bindir /home/ly/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib –export-dir /user/hive/warehouse/h_employee_export/ –mysql-delimiters –input-fields-terminated-by ‘\t’

解释说明: 
--mysql-delimiters指示说明输入数据使用MySQL默认的分隔符集合。域之间使用’,’;行与行之间使用’\n’,即换行符; 不检查’\’; 
可以通过--fields-terminated-by <char>--lines-terminated-by <char> 指定输出数据的域,行分割符 
--export-dir 为hive托管表的位置 
最后--input-fields-terminated-by '\t'指定输入数据的域之间的分隔符

从Hbase导入到MySQL中步骤较复杂,其中需要的注意的细节很多。在我将一个车辆的位置信息从MySQL导入到Hbase后,又想从Hbase中导出,结果在从Hive托管表的导出的过程中老是出错,这其中的原因是分隔符,空值的原因。另外需要Hive的表字段,字段类型和MySQL的字段,字段类型保持一致。

可以参考sqoop文档

对于出现的错误,大家要灵活处理。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LiuY_ang/article/details/78302520

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值