sqoop 是一个开源工具,它允许用户将数据库提取到Hadoop 中用于进一步得处理,提取到HDFS 的数据可以被Mapreduce 程序使用,也可以被其他类似于Hive 的工具用,在得到这些分析结果之前,sqoop 还可以将这些结果再导回到数据库
Sqoop 概述
Hadoop 数据传输工具Sqoop 是Apache 顶级项目,主要用于Hadoop 和关系型数据库、数据仓库、Nosql数据库间传递数据。通过Sqoop 可以方便的将数据从关系数据库·导入到HDFS,HBase,Hive 或者将数据从HDFS 导出到关系型数据库。
Hadoop 架构非常简单,它整合了Hive,HBase,和Oozie,通过Mapreduce 任务传输数据,并能提供并发特性和容错能力。Sqoop 集成了工作流协调的Apache Ooize ,可自定义安排或者自动导入/导出任务。
JDBC Java 数据库连接(Java Database connectinty)
Sqoop 主要通过JDBC 和关系型数据库进行交互,理论上但凡支持JDBC 关系型数据库都可以使用Sqoop 和HDFS 进行数据交互。以下是经过Sqoop 官方测试过得情况:
主要分为sqoop1和sqoop2 ,这两个版本完全不兼容。
Sqoop1 和Sqoop2 的区别:
工作模式
Sqoop1 基于客户端模式,用户模式时需要在客户端节点安装Sqoop 和连接器/驱动器。Sqoop 2基于服务模式,是sqoop1下一代版本,服务模式主要分为sqoop1 Server 和Client ,用户模式使用时需要在Sqoop2 Server 安装连接器/驱动器,所有配置信息都在Sqoop2 Server 进行配置。
MR角度透视及其区别
Sqoop 只要提交一个Map作业,数据的传输和转换都由Mapreduce 来完成。
Sqoop2 提交一个Mapreduce 作业,Mappers 负责从数据源传输数据,Reducers 负责根据指定的数据源来转换数据。
从安全角度
sqoop2 有针对的进行设计,管理员配置数据的来源和目标,操作者直接使用已经建好的链接,不需要了解该链接的具体详细信息,按需获取即可。
其他方面
Web UI:sqoop 只提供CLI 方式,sqoop 2 同时也支持web UI 的方式,Sqoop2 Server 以REST 服务提供CLI 和Web UI 。
另外。Sqoop2 REST 服务接口能更容易的集成其他框架进来,比如Oozie ,用来定义Sqoop2工作流
sqoop1 和sqoop2 的功能差异
功能 | sqoop1 | sqoop2 |
用于所有主要RDBMS的连接器 | 支持 | 不支持。解决办法,使用通用JDBC连接器,支持SQLServer,PostgreSQL,MYSQL和Oracle,此连接器可用于任何符合JDBC要求的数据库运行,但是,性能可能无法与sqoop1 中专用连接器相比 |
Kerberos | 支持 | 不支持 |
从RDBMS 安装至Hive 或HBase | 支持 | 不支持。解决办法:将数据从RDBMS 导入HDFS;在Hive 中使用相应的工具和命令手动将数据载入Hive 或HBase |
数据从Hive 或HBase 传输至RDBMS | 不支持,解决办法:从Hive或HBase将数据提取至HDFS;使用sqoop将上一步输出导出至RDBMS | 不支持,按照Sqoop1 相同的解决方法操作 |
由上图可以看出,sqoop1 架构非常简单,整合了Hive,HBase 和Oozie ,通过Map任务来传输数据,Map 负责数据的加载,转换,并存储到HDFS ,HBase或者Hive 中。
数据流程
1.sqoop 读取导入数据的表结构,生成运行类,默认是QueryResult ,打成jar 包,然后提交给Hadoop。
2.设置好job,主要设置sqoop 的各个参数
3.由Hadoop 来通过Mapreduce 来执行Import 命令:
a.首先要进行数据切分
b.切好范围后,写入范围,以便读取
c.读取上一步写入的范围
d.然后创建RecordReader 葱数据库中读取数据
e.创建Map
f.RecordReader 一行一行从关系型数据库中读取数据,设置好Map 的key 和value,交给Map
g.运行map
最后生成的key 是行数据,由QueryResult 生成,value 是NullWritable.get()
数据的导入导出
sqoop2架构
sqoop2是基于服务器的工具,是在迁移Hadoop 和关系型数据库之间的数据。
sqoop2 除了继续支持命令行交互方式外,重点增加基于Web 的UI 功能,使用这个界面接口,用户可以通过简单的UI 设置进行导入,导出,避免了繁琐的冗余选项,各种连接器已经被添加到应用程序中,用户就不再负责安装和配置连接器,这些连接器由sqoop 框架负责以界面以外的形式展示给用户。Web 的UI 模式保证了平台的安全性,并限制终端用户的操作。
Sqoop1 需要在客户端进行安装和配置,Sqoop2的安装和配置只在服务器端。这就意味着,连接器会在一个地方进行配置,并由管理员进行管理。同样,jdbc 驱动程序和数据库的链接信息也由服务器进行管理。Sqoop 2 提供基于Web 的服务,前端的命令行接口,浏览器和后端的元数据存储数据库。此外Hive 和HBase 也在服务器端进行集成Oozie 将会使用RESET API 管理sqoop 任务。
Sqoop2 的连接浏览器不再局限于JDBC 模式,Sqoop2 基于Web 的用户界面交互将引导用户进行导入/导出设置,消除冗余出错的步骤。
sqoop1 和sqoop2 的优缺点
比较 | sqoop1 | sqoop2
|
架构 | 仅仅使用一个sqoop客户端 | 引入sqoop server集中化管理 connector ,以及rest api,web,UI ,并引入权限安全机制 |
部署 | 部署简单,安装需要root权限,connetcor 必须符合JDBC 模型 | 架构稍复杂,部署更繁琐 |
使用 | 命令行方式容易出错,格式仅耦合,无法支持所有数据类型,安全机制不够完善,例如密码暴露 | 多种交互方式,命令行,web UI,rest API ,connetcor 集中化管理,所有链接安装在sqoop server 上,完善权限机制,connector 规范化,仅仅负责数据的读写 |