为了完成本关任务,你需要掌握: 1.Sqoop 概述; 2.Sqoop 基本架构。
Sqoop 概述
设计动机
Sqoop 从工程角度,解决了关系型数据库与 Hadoop 之间的数据传输问题,它构建了两者之间的“桥梁”,使得数据迁移工作变得异常简单。在实际项目中,如果遇到以下任务,可尝试使用 Sqoop 完成:
- 数据迁移:公司内部商用关系型数据仓库中的数据以分析为主,综合考虑扩展性、容错性和成本开销等方面。若将数据迁移到 Hadoop 大数据平台上,可以方便地使用 Hadoop 提供的如 Hive、SparkSQL 分布式系统等工具进行数据分析。为了一次性将数据导入 Hadoop 存储系统,可使用 Sqoop。
- 可视化分析结果:Hadoop 处理的输入数据规模可能是非常庞大的,比如 PB 级别,但最终产生的分析结果可能不会太大,比如报表数据等,而这类结果通常需要进行可视化,以便更直观地展示分析结果。目前绝大部分可视化工具与关系型数据库对接得比较好,因此,比较主流的做法是,将 Hadoop 产生的结果导入关系型数据库进行可视化展示;
- 数据增量导入:考虑到 Hadoop 对事务的支持比较差,因此,凡是涉及事务的应用,比如支付平台等,后端的存储均会选择关系型数据库,而事务相关的数据,比如用户支付行为等,可能在 Hadoop 分析用到(比如广告系统,推荐系统等)。为了减少 Hadoop 分析过程中影响这类系统的性能,通常不直接让 Hadoop 访问这些关系型数据库,而是单独导入一份到 Hadoop 存储系统中。
为了解决上述数据收集过程中遇到的问题,Apache Sqoop 项目诞生了,它是一个性能高、易用、灵活的数据导入导出工具,在关系型数据库与 Hadoop 之间搭建了一个桥梁,让关系型数据收集变得异常简单。
Sqoop 的“桥梁”作用
Sqoop 基本思想及特点
Sqoop 采用插拔式 Connector 架构,Connector 是与特定数据源相关的组件,主要负责(从特定数据源中)抽取和加载数据。用户可选择 Sqoop 自带的 Connector ,或者数据库提供商发布的 native Connector,甚至根据自己的需要定制 Connector,从而把 Sqoop 打造成一个公司级别的数据迁移统一管理工具。Sqoop 主要具备以下特点:
-
性能高:Sqoop 采用 MapReduce 完成数据的导入导出,具备了 MapReduce 所具有的优点,包括并发度可控、容错性高、扩展性高等。
-
自动类型转换:Sqoop 可读取数据源元信息,自动完成数据类型映射,用户也可以根据需要自定义类型映射关系;
-
自动传播元信息:Sqoop 在数据发送端和接收端之间传递数据的同时,也会将元信息传递过去,保证接收端和发送端有一致的元信息。
Sqoop基本架构
Sqoop 目前存在两个版本(2021.3.24截至),两个版本分别以版本号 1.4x 和1.99x 表示,通常简称为“Sqoop1”和“Sqoop2”,Sqoop2 在架构和设计思路上对 Sqoop1 做了重大改进,因此两个版本是完全不兼容的。在这一节中,我们重点关注这两个版本的设计原理和架构。
Sqoop1 基本架构
Sqoop1 是一个客户端工具,不需要启动任何服务即可使用,非常简便。Sqoop1 实际上是一个只有 Map 的 MapReduce 作业,它充分利用 MapReduce 高容错性、扩展性好等优点,将数据迁移任务转换为 MapReduce 作业,如下图:
Sqoop1 基本架构
当用户通过 shell 命令提交迁移作业后,Sqoop 会从关系型数据库中读取元信息,并根据并发度和数据表大小将数据划分成若干分片,每片交给一个 Map Task 处理,这样,多个 Map Task 同时读取数据库中的数据,并行将数据写入目标存储系统,比如HDFS、HBase 和 Hive 等。
Sqoop 允许用户通过定制各种参数控制作业,包括任务并发度、数据源、超过时间等。总架构上讲,Sqoop1 只是一个客户库工具,windows 下绿色版软件大多是对原始软件的破解,但如果你的数据迁移很多,Sqoop1则会暴露很多缺点,包括:
-
Connector 定制麻烦:Sqoop1 仅支持基于 JDBC 的 Connector;Connector 开发复杂,通用的功能也需要自己开发而不是提前提供好;Connector 与 Hadoop 耦合度过高,使得开发一个 Connector 需要对 Hadoop 有充分的理解和学习。
-
客户端软件繁多:Sqoop1 要求对依赖的软件必须安装在客户端上,包括MySQL 客户端、Hadoop/HBase/Hive 客户端、JDBC 驱动、数据库厂商提供的 Connector 等,这使得 Sqoop 客户端不容易部署和安装。
-
安全性差:Sqoop1 需要用户明文提供数据库的用户名和密码,但未考虑如何利用 Hadoop 安全机制提供可靠且安全地数据迁移工作。
Sqoop2 基本架构
为了解决 Sqoop1 客户端架构所带来的问题,Sqoop2 对其进行了改进,如下架构图:
Sqoop2 基本架构
其中引入了Sqoop Server,将所有管理工作放到Server端,包括 Connector 管理、MySQL/Hadoop 相关的客户端、安全认证等,这使得 Sqoop 客户端变得非常轻,更易于使用。Sqoop1 到 Sqoop2 的变迁,类似于传统软件架构到云计算架构的变迁,将所有软件运行“云端”(Sqoop Server),而用户只需通过命令和或浏览器便可随时随处使用 Sqoop。
Sqoop2 主要组件及功能如下:
- Sqoop Client
定义了用户使用 Sqoop 的方式,包括客户端命令行(CLI)和浏览器两种方式,其中浏览器方式允许用户直接通过HTTP方式完成Sqoop 的管理和数据的导入导出。
- Sqoop Server
Sqoop1 中 Client 端大部分功能在 Sqoop2 中转移到了 Sqoop Server端,包括: ①Connector:所有 Connector 的实现放置到 Sqoop Server 端,且 Connector 被进一步抽象化和模块化,它的通用部分被抽取出来,本身只关注数据解析和加载相关的功能,包括 Partitioner、Extractor 和 Loader 等主要模块。具体功能如下:
Partitioner:决定如何对源数据进行分片(SqoopSplit),以便启动 Map Task 并行处理; Extractor:将一个分片中的数据解析成一条条记录,并输出; Loader:读取Extractor 输出的数据,并以特定格式写入目标数据源中。
从前面介绍可容易看出,整个过程只需要一个 MapReduce 作业即可完成:Partitioner 和 Extractor 在 Map 阶段完成,Loader 在 Reduce 阶段完成。
Metadata: Sqoop 中的元信息,包括可用的 Connector 列表、用户创建的作业和 Link (实例化的一个 Connector ,以便创建作业时使用)等。元信息被存储在数据仓库中,默认使用轻量级数据库 Apache Derby,用户也可根据需要替换成 MySQL 等其它数据库。
②RESTful 和 HTTP Server:与客户端对接,响应客户端发出的 RESTful 请求和 HTTP 请求
③Sqoop Server 会根据用户创建的 Sqoop Job 生成一个 MapReduce 作业,提交至 Hadoop 集群中分布式执行
Sqoop1 与 Sqoop2 对比
Sqoop2 在 Sqoop1 的基础上进行了重大改进,分别从易用性、扩展性和安全性三个方面对比 Sqoop1 和 Sqoop2 。
易用性:
Sqoop1 | Sqoop2 |
---|---|
Client-Only 架构,所有软件依赖部署至客户端 | Clinet/Server 架构,所有软件依赖部署到服务器端,进而使得客户端很轻量级 |
客户端仅支持命令行访问方式(CLI) | 客户端支持命令行和Web两种方式 |
客户端需访问Hive、HBase等数据源 | 服务器端访问 Hive、HBase 等数据源,客户端只需发送请求即可 |
扩展性:
Sqoop1 | Sqoop2 |
---|---|
Connector 必须遵循 JDBC 模型 | Connector 被进一步泛化,只需实现若干组件即可 |
Connector 实现需考虑通用功能模块,比如下游数据流的文件格式转化、与其他系统(比如 HDFS、Hive等)集成等 | 通用功能模块被独立出来,用户设计Connector 时只需考虑与特定数据源相关的数据抽取、数据加载等功能即可 |
Sqoop 根据配置隐式地为用户选择Connector,很容易导致 Connector 误用 | 用户可显示为作业指定 Connector,避免误用 |
安全性:
Sqoop1 | Sqoop2 |
---|---|
仅支持 Hadoop Security | 增加对基于角色的安全访问控制 |
无任何资源管理机制 | 增加资源管理机制,用户可更细粒度地管理作业所占用的资源,比如同时打开的连接数、显示删除连接等 |
总结起来,Sqoop2 通过将访问入口服务化,将所有的复杂功能放到服务器端,大大简化了客户端实现,使其更轻量级,进而变得更加易用。
1、Sqoop 是一个性能高、易用、灵活的数据导入导出工具,能够使得 Hadoop 和关系型数据库之间数据传输非常方便。以上说法是否正确:
A、正确 *
B、错误
2、以下对于 Sqoop 说法正确的是:
A、Sqoop 采用 MapReduce 完成数据的导入导出 *
B、Sqoop 可读取数据源元信息,自动完成数据类型映射,用户也可以根据需要自定义类型映射关系;*
C、Sqoop 在数据发送端和接收端之间传递数据的同时,也会将元信息传递过去,保证接收端和发送端有一致的元信息。*
D、Sqoop 具备了 MapReduce 所具有的优点,包括并发度可控、容错性高、扩展性高等。*
3、对于 Sqoop1 与 Sqoop2 区别错误的是:
A、Sqoop1 客户端需访问Hive、HBase等数据源,Sqoop2 服务器端访问 Hive、HBase 等数据源,客户端只需发送请求即可。
B、Sqoop1 客户端仅支持命令行访问方式(CLI),Sqoop2 客户端支持命令行和 Web 两种方式。
C、Sqoop1 增加资源管理机制,Sqoop2 无任何资源管理机制。*
D、Sqoop1 仅支持 Hadoop Security,Sqoop2 可以增加对基于角色的安全访问控制。