前言
提示:本教程使用环境为:
CentOS6.5
CDH5.3.6
本教程将演示由Mysql到HDFS和Mysql到Hive两种导入过程,
由于版本不一致可能会有操作上的不同。如果目前仍没有搭好Sqoop环境,请看最简便CentOS6.5下CDH版本sqoop安装步骤
一、Sqoop是什么,import操作是怎样?
Sqoop - “SQL到Hadoop和Hadoop到SQL”,
sqoop是apache旗下一款"Hadoop和关系数据库服务器之间传送数据"的工具。
导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;
导出数据:从Hadoop的文件系统中导出数据到关系数据库mysql等。
可以看到,Sqoop的import过程主要是由map实现的,而不经过reduce过程。本教程选取Mysql数据库作为RDBMS的代表,所以请想动手验证的各位确保自己安装好了Mysql环境与驱动。
二、Mysql到HDFS
1.创建Mysql表
首先命令行输入mysql -u用户名 -p密码 ;
进入mysql,输入use 数据库名 ;
选定数据库,然后创建下表:
mysql> CREATE TABLE emp1
-> (
-> id INT(11)primary key,
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT
-> );
使用desc emp1 ;
查看表结构
2.插入数据
表格创建好后还没有数据,我们要随便往里写一些。
INSERT INTO emp1 VALUES(1,'Joey',1,3000);
INSERT INTO emp1 VALUES(2,'Chandler',1,5000);
INSERT INTO emp1 VALUES(3,'Mary',2,8000);
INSERT INTO emp1 VALUES(4,'Lip',2,3000);
然后查看表数据是否填写成功:
3.import到HDFS
首先启动好我们的HDFS,
然后进入Sqoop安装目录导入数据:
bin/sqoop import \
--connect jdbc:mysql://hadoop:3306/test \
--username root \
--password password \
--table emp1\
--m 1
其中jdbc后注意更改为自己的主机名和数据库名,三四行改为自己的mysql用户名和密码
我们观察命令运行过程可以看到sqoop底层运行的就是mapreduce,它是将这个保存为一个emp1.jar的包来执行,现在我们可以用bin/hdfs dfs -cat /user/root/emp1/part-m-00000
命令查看结果
成功导入!
三、Mysql到Hive
过程与前面类似,只需添加上hive-import
bin/sqoop import \
--connect "jdbc:mysql://hadoop:3306/test" \
--username root \
--password password \
--hive-import \
--fields-terminated-by ',' \
--table emp1 \
--m 1
执行完后我们进入hive的shell进行查看是否多了表
看到多了emp1这个表,输入select * from emp1 ;
发现数据已经成功导入,但其实我们清楚Hive的存储实际上没有改变文件格式,那么这个Hive的导入和HDFS的导入有何区别呢?我们进入HDFS目录进行查看:
发现HDFS的默认导入目录上也多了emp1这个目录,但只有执行成功的文件并没有数据,我们再进入warehouse目录查看
可以得出这个导入的底层实际实现还是将mysql表数据导入到了HDFS的默认目录,后调用hive元数据操作API接口,执行建表、将数据从临时目录导入到hive目录的操作。
总结
本节教程我们尝试了Sqoop的import功能,将Mysql数据导入到HDFS或Hive上,其中import还有更多的参数设置包括snappy压缩,存储格式调整等等希望大家多多尝试,一同学习进步!