为了完成本关任务,你需要掌握: 1.Sqoop 概述; 2.Sqoop 基本架构。
Sqoop 概述
设计动机
Sqoop 从工程角度,解决了关系型数据库与 Hadoop 之间的数据传输问题,它构建了两者之间的“桥梁”,使得数据迁移工作变得异常简单。在实际项目中,如果遇到以下任务,可尝试使用 Sqoop 完成:
为了解决上述数据收集过程中遇到的问题,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 的方式,包括客户端命令行(CLI)和浏览器两种方式,其中浏览器方式允许用户直接通过HTTP方式完成Sqoop 的管理和数据的导入导出。
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 可以增加对基于角色的安全访问控制。