Sqoop概述 第1关:Sqoop概述

30 篇文章 5 订阅
10 篇文章 0 订阅

为了完成本关任务,你需要掌握: 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 。

易用性:

Sqoop1Sqoop2
Client-Only 架构,所有软件依赖部署至客户端Clinet/Server 架构,所有软件依赖部署到服务器端,进而使得客户端很轻量级
客户端仅支持命令行访问方式(CLI)客户端支持命令行和Web两种方式
客户端需访问Hive、HBase等数据源服务器端访问 Hive、HBase 等数据源,客户端只需发送请求即可

扩展性:

Sqoop1Sqoop2
Connector 必须遵循 JDBC 模型Connector 被进一步泛化,只需实现若干组件即可
Connector 实现需考虑通用功能模块,比如下游数据流的文件格式转化、与其他系统(比如 HDFS、Hive等)集成等通用功能模块被独立出来,用户设计Connector 时只需考虑与特定数据源相关的数据抽取、数据加载等功能即可
Sqoop 根据配置隐式地为用户选择Connector,很容易导致 Connector 误用用户可显示为作业指定 Connector,避免误用

安全性:

Sqoop1Sqoop2
仅支持 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 可以增加对基于角色的安全访问控制。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: sqoop 是一种用于将系型数据库中的数据导入到 Hadoop 生态系统中的工具。在第一中,我们将使用 sqoop 将数据从系型数据库中导入到 HBase 中。HBase 是一个分布式的、面向列的 NoSQL 数据库,它可以处理大量的结构化数据。通过将数据从系型数据库导入到 HBase 中,我们可以更好地利用 Hadoop 生态系统的强大功能来处理和分析数据。 ### 回答2: 被称为“水管工”的Sqoop是一个用于将系型数据库与Hadoop用例一起使用的工具。Sqoop是一个开源的命令行工具,可提供对大规模数据的高效传输的支持。HBase是一个可伸缩的分布式非系型数据库,可以承载大量的结构化数据。在本文中,我们将讨论如何使用Sqoop工具将系型数据源导入到HBase中。 第一步是安装和配置Sqoop和HBase。 在Sqoop官方文档中,有包含安装和配置的详细指南,可以参考使用。同时,也需要在HBase中创建表来存储数据。 第二步是使用Sqoop命令将数据源的数据导入到HBase。 在这里我们可以使用以下命令: sqoop import \ --connect jdbc:mysql://localhost/sampledb \ --username root \ --password root \ --table employees \ --hbase-create-table \ --hbase-table employee_data \ --column-family personal_data \ --hbase-row-key emp_id \ --split-by emp_id \ --m 5 让我们来看看每个参数的含义: -connect: 指定连接到MySQL数据库的URL -username: MySQL数据库的用户名 -password: MySQL数据库的密码 -table: 希望从中导入数据的表 -hbase-create-table: 在HBase中创建一张表 -hbase-table: 在HBase中创建的表的名称 -column-family: 在HBase中创建的列族的名称 -hbase-row-key: 指定在HBase中用作行键的列的名称 -split-by: 数据的划分依据 -m: 同时进行的Map任务数 在Sqoop导入命令执行之后,会将数据导入到HBase的表中。因此,可以使用HBase Shell工具或用于Java的HBase API来访问导入的数据。 需要注意的是,Sqoop在导入数据时会根据--split-by参数自动进行数据划分,进而生成多个MapReduce任务。使用多个任务旨在加快数据导入的速度并提高效率,同时保持数据的完整性。 总之,Sqoop是一种灵活的工具,可以帮助我们将系型数据库中的数据导入到HBase中,从而使我们能够更好地利用Hadoop大数据平台的优势。 但需要注意,Sqoop在导入数据时,需要加入一定的参数来保证数据的正常导入。 ### 回答3: Sqoop是一款开源的数据传输工具,可以将系型数据库中的数据导入到Hadoop生态系统中的HDFS、Hive和HBase等组件中。在本题中,我们将使用Sqoop将MySQL数据库中的数据导入到HBase中。 首先,我们需要确保本地安装了Sqoop。如果还没有安装,可以从Apache Sqoop的官方网站上下载并按照官方文档进行配置和安装。安装好Sqoop之后,我们就可以开始导入数据到HBase了。 在此之前,我们需要将MySQL中的数据表进行扫描,并创建一个与该表结构相同的HBase表。可以使用以下命令创建HBase表: ``` create 'tableName', 'columnFamily' ``` 其中,`tableName`是表名,`columnFamily`是列簇名。 接下来,我们可以使用Sqoop进行数据导入。以下是一个简单的Sqoop命令示例: ``` sqoop import --connect jdbc:mysql://localhost/mydb --username myusername --password mypassword --table tableName --hbase-table hbaseTableName --column-family columnFamily --hbase-row-key rowKeyName --split-by columnName ``` 解释一下上述命令中各个参数的含义: - `--connect`:指定连接到的MySQL数据库的URL。 - `--username`:指定连接MySQL数据库所需要的用户名。 - `--password`:指定连接MySQL数据库所需要的密码。 - `--table`:指定需要导入的MySQL数据表名。 - `--hbase-table`:指定需要创建的HBase表名。 - `--column-family`:指定需要创建的HBase表中的列簇名。 - `--hbase-row-key`:指定HBase表中的行键名。 - `--split-by`:指定用于分割数据的列名。 在执行完上述命令之后,Sqoop会自动将MySQL中的数据表数据导入到HBase表中。在查询HBase表中的数据时,可以使用HBase的shell工具进行查询和操作。 在实际应用中,Sqoop可支持多种数据源或传输方式,例如可以从Oracle、SQL Server等系型数据库、FTP服务器、网络协议等数据源中获取数据,并能导入到Hadoop中的不同组件或是其他存储平台。因此,对于数据的导入和导出,Sqoop为我们提供了很大的便利性和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值