欢迎投稿

今日深度:

Hbase和Mysql文件互相导入,

Hbase和Mysql文件互相导入,


以下的步骤都是我实验成功后的记录下来的,只记录了大体的步骤,由于环境的差异,可能导致你的操作并不一定会成功!不要机械的式的复制,要结合你本机的环境去处理。对于配置选项,有些我也不抬理解,待理解之后再来补充。
实验环境:
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文档

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

www.htsjk.Com true http://www.htsjk.com/hbase/36217.html NewsArticle Hbase和Mysql文件互相导入, 以下的步骤都是我实验成功后的记录下来的,只记录了大体的步骤,由于环境的差异,可能导致你的操作并不一定会成功!不要机械的式的复制,要结合你本...
相关文章
    暂无相关文章
评论暂时关闭