Sqoop架构以及应用介绍
本篇文章在具体介绍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命令或者Javaapi命令后,通过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
- 1
- 1
运行结果如下图所示:
通过Sqoop这个工具就将我们Mysql数据库中的数据导入到了HDFS中,上面的shell命令类似我们下面的shell操作:
hadoop jar copy.jar mysql://hadoop80:3306/hive/consumer /outdir/
- 1
- 1
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
- 1
- 1
增量导入的结果如下图所示:
从运行结果可以看出,输出结果多了一个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
- 1
- 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
- 1
- 1
运行结果如下图所示:
通过Sqoop这个工具就将我们Mysql数据库中的数据导入到了Hive数据仓库中,上面的shell命令类似我们下面的shell操作:
hadoop jar copy.jar mysql://hadoop80:3306/hive/consumer /hive/d1.table1
- 1
- 1
即本质上通过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
- 1
- 1
运行结果如下:
通过Sqoop这个工具就将我们Mysql数据库中的数据导入到了Hbase中,上面的shell命令类似我们下面的shell操作:
hadoop jar copy.jar mysql://hadoop80:3306/hive/consumer /hbase/A
- 1
- 1
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
- 1
- 1
运行结果,数据从HDFS的t1文件中成功的导入到了Mysql中的consumer表中:
注:从Hadoop向数据库中导入数据时,数据库中相应的表事先必须创建好。
(三)总结
Sqoop作为一个用来将关系型数据库和Hadoop中的数据进行相互转移的工具,对于我们来说更重要的在于灵活的运用这个工具。
Sqoop架构以及应用介绍的更多相关文章
- Sqoop架构
Sqoop 架构 Sqoop 架构是非常简单的,它主要由三个部分组成:Sqoop client.HDFS/HBase/Hive.Database.下面我们来看一下 Sqoop 的架构图. 用户向 Sq ...
- Sqoop架构(四)
Sqoop 架构是非常简单的,它主要由三个部分组成:Sqoop client.HDFS/HBase/Hive.Database. 下面是Sqoop 的架构图 (1)用户向 Sqoop 发起一个命令之后 ...
- 深入浅出node.js游戏服务器开发1——基础架构与框架介绍
2013年04月19日 14:09:37 MJiao 阅读数:4614 深入浅出node.js游戏服务器开发1——基础架构与框架介绍 游戏服务器概述 没开发过游戏的人会觉得游戏服务器是很神秘的 ...
- scrapy架构与目录介绍、scrapy解析数据、配置相关、全站爬取cnblogs数据、存储数据、爬虫中间件、加代理、加header、集成selenium
今日内容概要 scrapy架构和目录介绍 scrapy解析数据 setting中相关配置 全站爬取cnblgos文章 存储数据 爬虫中间件和下载中间件 加代理,加header,集成selenium 内 ...
- HBase的基本架构及其原理介绍
1.概述:最近,有一些工程师问我有关HBase的基本架构的问题,其实这个问题仅仅说架构是非常简单,但是需要理解.在这里,我觉得可以用HDFS的架构作为借鉴.(其实像Hadoop生态系统中的大部分组建的 ...
- iOS开发:iOS的整体架构以及API介绍
iOS的整体架构分为4层——Cocoa Touch层.Media层.Core Services层和Core OS层,下面概要介绍一下这4层. Cocoa Touch:构建iOS应用的一些基本系统服务, ...
- Openstack Swift 原理、架构与 API 介绍
OpenStack Swift 开源项目提供了弹性可伸缩.高可用的分布式对象存储服务,适合存储大规模非结构化数据.本文将深入介绍 Swift 的基本设计原理.对称式的系统架构和 RESTful API ...
- Flume架构以及应用介绍[转]
在具体介绍本文内容之前,先给大家看一下Hadoop业务的整体开发流程: 从Hadoop的业务开发流程图中可以看出,在大数据的业务处理过程中,对于数据的采集是十分重要的一步,也是不可避免的一步,从而引出 ...
- Flume架构以及应用介绍
在具体介绍本文内容之前,先给大家看一下Hadoop业务的整体开发流程: 从Hadoop的业务开发流程图中可以看出,在大数据的业务处理过程中,对于数据的采集是十分重要的一步,也是不可避免的一步,从而引 ...
随机推荐
- Linux下Nagios的安装与配置(转载)
一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报 ...
- Android中关于cursor类介绍
使用过 SQLite 数据库的童鞋对 Cursor 应该不陌生,如果你是搞.net 开发你大可以把Cursor理解成 Ado.net 中的数据集合相当于dataReader.今天特地将它单独拿出来谈, ...
- BAT都来参加的 DevOps Master 培训
原文:http://www.sohu.com/a/128425731_262549 自高效运维社区开设 DevOps Master 认证培训以来,已经总共有120多人拿到证书,其中在今年春节后,有68 ...
- SQL Server统计信息:问题和解决方式
在网上看到一篇介绍使用统计信息出现的问题已经解决方式,感觉写的很全面. 在自己看的过程中顺便做了翻译. 因为本人英文水平有限,可能中间有一些错误. 假设有哪里有问题欢迎大家批评指正.建议英文好的直接看 ...
- SpringMVC 学习笔记(十一) SpirngMVC执行流程
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTY3NDc0NTA2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- JSON-Schema 最科学的表单验证模式
相关传送门: # JSON schema与表单验证 https://mp.weixin.qq.com/s?__biz=MjM5MTA1MjAxMQ==&mid=2651226711&i ...
- MySQL八:视图、触发器、事物、存储过程、函数
阅读目录 一 视图 二 触发器 三 事务 四 储存过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名 ...
- sparkstreaming+socket workCount 小案例
Consumer代码 import org.apache.spark.SparkConf import org.apache.spark.streaming.StreamingContext impo ...
- cache和内存
CPU与内存 北桥:主桥,主要用来处理高速信号,负责与处理器的联系:CPU通过FSB前端总线来访问内存控制器. 南桥:IO桥,负责IO总线之间的通信,比如PCI总线.SATA.USB等,可以连接光驱. ...
- Linux4_文件操作
以下操作都是在终端命令行: 1 apt-get install 应用名称,(---:apt-get是从Ubuntu的软件应用里自动下载) 如果你不知道下载,随便输入:java,javac,tree ...