关闭

[置顶] Sqoop架构以及应用介绍

标签: Sqoop
14173人阅读 评论(0) 收藏 举报
分类:

本篇文章在具体介绍Sqoop之前,先给大家用一个流程图介绍Hadoop业务的开发流程以及Sqoop在业务当中的实际地位。
这里写图片描述
如上图所示:在实际的业务当中,我们首先对原始数据集通过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
这里写图片描述
说明:
- -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这个工具就将我们Mysql数据库中的数据导入到了HDFS中,上面的shell命令类似我们下面的shell操作:

hadoop jar   copy.jar   mysql://hadoop80:3306/hive/consumer  /outdir/

2、增量导入
在实际的工作当中都是数据库的表中数据不断增加的,比如刚才的consumer表,因此每次导入的时候只想导入增量的部分,不想将表中的数据在重新导入一次(费时费力),即如果表中的数据增加了内容,就向Hadoop中导入一下,如果表中的数据没有增加就不导入—–这就是增量导入。
- -incremental append:增量导入
- -check-column:(增量导入时需要指定增量的标准—哪一列作为增量的标准)
- -last-value:(增量导入时必须指定参考列—–上一次导入的最后一个值,否则表中的数据又会被重新导入一次)
以刚才的consumer表为例,我们向consumer表中增加两条记录,如下图所示:
这里写图片描述
shell的增量操作:

sqoop import --connect     jdbc:mysql://hadoop80:3306/hive     --table  consumer                --username root --password  admin    --target-dir /outdir/  --fields-terminated-by '\t'  -m 1   --incremental append  --check-column  id  --last-value  4

增量导入的结果如下图所示:
这里写图片描述
从运行结果可以看出,输出结果多了一个part-m-00001,而该文件中所包含的内容为:
这里写图片描述
文件中的内容正是刚刚我们新增加的两条记录。
3、批量导入
从上面导入的命令可以看出,命令行包含的命令太多了,太麻烦了,因此如果类似的作业太多的话,我们应该将其设置为一个作业,做成一个脚本文件。
创建批脚本作业的shell命令:

sqoop   job  --create   job001 --    import --connect     jdbc:mysql://hadoop80:3306/hive                       --table  consumer         --username root --password  admin    --target-dir    /outdir/                                  --fields-terminated-by '\t'  -m 1 

通过sqoop job –list可以查看生成的批脚本文件:
这里写图片描述
通过sqoop job –exec 即可运行我们刚才生成的脚本文件,将我们Mysql数据库中的consumer表中的数据导入到HDFS中,而不需要每次都写很长的命令来运行。
4、Sqoop import to hive
这里写图片描述
说明:
- -connect:指定JDBC的URL 其中database指的是(Mysql或者Oracle)中的数据库名
- -table:指的是要读取数据库database中的表名
- -username - -password:指的是Mysql数据库中的用户名和密码
- -hive-import 指的是将数据导入到hive数据仓库中
- -create-hive-table 创建表,注意:如果表已经存在就不用写这个命令了,否则会报错
- -hive-table 指定databasename.tablename (哪个数据库中的哪个表)
- -fields-terminated-by :设定导入数据后每个字段的分隔符
-m:并发的map数量
- -null-string:导入的字段为空时,用指定的字符进行替换
- -incremental append:增量导入
- -check-column:指定增量导入时的参考列
- -last-value:上一次导入的最后一个值
同样,下面给大家举一个例子进行相应的说明:对于Mysql数据库,将hive数据库中的consumer表通过sqoop导入到Hive数据仓库中
这里写图片描述
shell命令操作:

sqoop import --connect jdbc:mysql://hadoop80:3306/hive  --table consumer     --username root --password admin --hive-import  --create-hive-table  --hive-table d1.table1                  --fields-terminated-by  '\t'  -m 1

运行结果如下图所示:
这里写图片描述
通过Sqoop这个工具就将我们Mysql数据库中的数据导入到了Hive数据仓库中,上面的shell命令类似我们下面的shell操作:

hadoop jar copy.jar  mysql://hadoop80:3306/hive/consumer  /hive/d1.table1

即本质上通过sqoop这个工具完成的就是一个数据的拷贝工作。
注:如果我们对sqoop import to hive不熟悉的话,我们可以先将数据库中的数据导入到HDFS的指定目录下,然后在Hive中创建一个外部表关联这个指定目录即可。
5、Sqoop import to hbase
这里写图片描述
说明:
- -connect:指定JDBC的URL 其中database指的是(Mysql或者Oracle)中的数据库名
- -table:指的是要读取数据库database中的表名
- -username - -password:指的是Mysql数据库中的用户名和密码
- -hbase-create-table:表示在hbase中建立表
- -hbase-table A:指定在hbase中建立表A
- -column-family infor:表示在表A中建立列族infor。
- -hbase-row-key :表示表A的row-key是consumer表的id字段
-m:并发的map数量
- -null-string:导入的字段为空时,用指定的字符进行替换
- -incremental append:增量导入
- -check-column:指定增量导入时的参考列
- -last-value:上一次导入的最后一个值
下面给大家举一个例子进行相应的说明:对于Mysql数据库,将hive数据库中的consumer表通过sqoop导入到Hbase中:
这里写图片描述
shell命令:

 sqoop import --connect jdbc:mysql://hadoop80:3306/hive  --table consumer    --username root --password admin    --hbase-create-table     --hbase-table A      --column-family infor                      --hbase-row-key id --fields-terminated-by '\t'  -m 1

运行结果如下:
这里写图片描述
通过Sqoop这个工具就将我们Mysql数据库中的数据导入到了Hbase中,上面的shell命令类似我们下面的shell操作:

hadoop jar copy.jar  mysql://hadoop80:3306/hive/consumer  /hbase/A

5、Sqoop export
这里写图片描述
下面给大家举一个例子进行相应的说明:假设将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中的数据进行相互转移的工具,对于我们来说更重要的在于灵活的运用这个工具。
如有问题,欢迎留言。

3
0
查看评论

sqoop框架原理及基本操作

1、Sqoop是什么 Sqoop:SQL-to-Hadoop 传统数据库与Hadoop间数据同步工具 利用Mapreduce分布式批处理,加快了数据传输速度,保证了容错性 2、Sqoop1架构 sqoop1 import原理: 从传统数据库获取元数据信息(...
  • zhongwen7710
  • zhongwen7710
  • 2014-10-13 01:03
  • 5271

1.sqoop概念,功能,架构,版本

1.sqoop概念 sqoop(SQL TO HADOOP),是hadoop的协作框架之一 2.功能 对于hadoop进行大数据处理的数据来源主要有两部分 (1)关系数据库,RDBMS(Oracle,MySQL,DB2…) (2)文件(apache,nginx日...
  • sinat_33363493
  • sinat_33363493
  • 2017-04-29 10:37
  • 787

Hadoop数据传输工具sqoop

概述 sqoop是Apache顶级项目,主要用来在Hadoop和关系数据库中传递数据。通过sqoop,我们可以方便的将数据从关系数据库导入到HDFS,或者将数据从HDFS导出到关系数据库。 sqoop架构: sqoop架构非常简单,其整合了Hive、Hbase和Oozie,通过map-redu...
  • yfkiss
  • yfkiss
  • 2013-03-24 19:22
  • 59175

Sqoop1.X 和 Sqoop2架构区别

Sqoop1vs Sqoop2 1:两个不同版本,完全不兼容 2:版本号划分方式       Apache:1.4.x~ ,1.99.x~      CDH:sqoop-1.4.3-cdh4,sqoop2-1.99.2-cdh4...
  • nysyxxg
  • nysyxxg
  • 2015-03-29 11:27
  • 4674

sqoop使用与原理

1、sqoop简介     sqoop是一个用来将hadoop中hdfs和关系型数据库中的数据相互迁移的工具,可以将一个关系型数据库(mysql、oracle等)中的数据     导入到hadoop的hdfs中,也可以将hdfs的数据导入到关系...
  • u013234372
  • u013234372
  • 2014-10-07 15:48
  • 3539

Sqoop详解

引言 Sqoop依赖与hadoop        数据的一方,存储在hdfs        底层的数据传输实现map/reduce yarn 只有map任务 因为官网sqoop没...
  • jiangsanfeng1111
  • jiangsanfeng1111
  • 2016-11-25 15:01
  • 3475

sqoop使用中文手册

文章转载自:http://www.zihou.me/html/2014/01/28/9114.html Sqoop中文手册 8,038浏览 1条回复 子猴:Sqoop在我们的实际工作中有一些应用,为了对Sqoop的使用有个更全面的了解,于是我花了一些时...
  • myrainblues
  • myrainblues
  • 2015-02-09 17:36
  • 16218

Sqoop使用和简介

Sqoop 工具是hadoop环境下连接关系数据库,和hadoop存储系统的桥梁,支持多种关系数据源和hive,hdfs,hbase的相互导入。一般情况下,关系数据表存在于线上环境的备份环境,需要每天进行数据导入,根据每天的数据量而言,sqoop可以全表导入,对于每天产生的数据量不是很大的情形可以全...
  • lichangzai
  • lichangzai
  • 2014-02-14 17:10
  • 5972

Sqoop详细介绍包括:sqoop命令,原理,流程

Sqoop详细介绍包括:sqoop命令,原理,流程 一简介 Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数...
  • hhf1029
  • hhf1029
  • 2014-08-28 10:48
  • 5571

sqoop原理

sqoop,各位看官基本上都了解或者听说过,小二就不进行废话了。另外基于国内大部分用的为CDH,小二就想说一点:CDH中的sqoop2其实是apace版的sqoop1,聪明的看官不要被表面所迷惑了.第一关:无图无真相 第二关:无错不欢 一般会有三类错误 1.缺少jdbc导致错误 2.无法解析...
  • jsjsjs1789
  • jsjsjs1789
  • 2016-11-11 17:59
  • 491
    个人资料
    • 访问:655383次
    • 积分:9282
    • 等级:
    • 排名:第2364名
    • 原创:332篇
    • 转载:87篇
    • 译文:0篇
    • 评论:113条
    最新评论