如上图所示:在实际的业务当中,我们首先对原始数据集通过MapReduce进行数据清洗,然后将清洗后的数据存入到Hbase数据库中,而后通过数据仓库Hive对Hbase中的数据进行统计与分析,分析之后将分析结果存入到Hive表中,然后通过Sqoop这个工具将我们的数据挖掘结果导入到MySql数据库中,最后通过Web将结果展示给客户。
向大家展示完Hadoop业务开发流程之后,将进入到本篇文章的正题—-Sqoop架构以及应用的介绍。
(一)Sqoop架构介绍
1、Sqoop的概念
Sqoop:SQL–to–Hadoop
正如Sqoop的名字所示:Sqoop是一个用来将关系型数据库和Hadoop中的数据进行相互转移的工具,可以将一个关系型数据库(例如Mysql、Oracle)中的数据导入到Hadoop(例如HDFS、Hive、Hbase)中,也可以将Hadoop(例如HDFS、Hive、Hbase)中的数据导入到关系型数据库(例如Mysql、Oracle)中。如下图所示:
2、Sqoop架构
Sqoop架构:
正如上图所示:Sqoop工具接收到客户端的shell命令或者Java api命令后,通过Sqoop中的任务翻译器(Task Translator)将命令转换为对应的MapReduce任务,而后将关系型数据库和Hadoop中的数据进行相互转移,进而完成数据的拷贝。
(二)Sqoop应用介绍
Sqoop作为一个数据转移工具,必须要掌握其具体用法,下面将围绕Sqoop import to HDFS、增量导入、批脚本执行、Sqoop import to Hive、Sqoop import to Hbase、Sqoop export 几个方面进行介绍。
1、Sqoop import to HDFS
正如上图所示:Sqoop工具接收到客户端的shell命令或者Java api命令后,通过Sqoop中的任务翻译器(Task Translator)将命令转换为对应的MapReduce任务,而后将关系型数据库和Hadoop中的数据进行相互转移,进而完成数据的拷贝。
(二)Sqoop应用介绍
Sqoop作为一个数据转移工具,必须要掌握其具体用法,下面将围绕Sqoop import to HDFS、增量导入、批脚本执行、Sqoop import to Hive、Sqoop import to Hbase、Sqoop export 几个方面进行介绍。
1、Sqoop import to HDFS
说明:
- -connect:指定JDBC的URL 其中database指的是(Mysql或者Oracle)中的数据库名
- -table:指的是要读取数据库database中的表名
- -username - -password:指的是Mysql数据库中的用户名和密码
- -target-dir:指的是HDFS中导入表的存放目录(注意:是目录)
- -fields-terminated-by :设定导入数据后每个字段的分隔符
-m:并发的map数量
- -null-string:导入的字段为空时,用指定的字符进行替换
- -incremental append:增量导入
- -check-column:指定增量导入时的参考列
- -last-value:上一次导入的最后一个值
下面给大家举一个例子进行相应说明:对于Mysql数据库,将hive数据库中的consumer表通过sqoop导入到HDFS中
shell命令:
sqoop import --connect jdbc:mysql://hadoop80:3306/hive --table consumer --username root --password admin --target-dir /outdir/ --fields-terminated-by '\t' -m 1
Sqoop export to mysql
下面给大家举一个例子进行相应的说明:假设将HDFS中的t1表通过sqoop导入到Mysql中的consumer表(事先必须存在):
HDFS中t1表的内容:
MySql中已经创建好的consumer表:
shell命令如下:
sqoop export --connect jdbc:mysql://hadoop80:3306/hive --table consumer --username root --password admin --export-dir /outdir/ --fields-terminated-by '\t' -m 1
运行结果,数据从HDFS的t1文件中成功的导入到了Mysql中的consumer表中:
注:从Hadoop向数据库中导入数据时,数据库中相应的表事先必须创建好。
(三)总结
Sqoop作为一个用来将关系型数据库和Hadoop中的数据进行相互转移的工具,对于我们来说更重要的在于灵活的运用这个工具。
如有问题,欢迎留言。