Sqoop - 数据库离线数据采集工具使用详解1(基本介绍、安装配置)
作者:hangge | 2024-04-07 08:55
一、基本介绍
1,什么是 Sqoop?
Sqoop 是由 Apache 开源的一个可以将 Hadoop 和关系型数据库中的数据相互转移的工具,可以将关系型数据库(例如 MySQL、Oracle 等)中的数据导入 Hadoop,也可以将 Hadoop 中的数据导出到关系型数据库中。
2,Sqoop 的版本说明
(1)Sqoop 目前有两个版本,完全不兼容。可以从版本号进行区分:1.4.x 为 Sqoop 1,1.99.x 为 Sqoop2。
- 在 Sqoop 1 中,Sqoop 只是一个客户端工具,负责将用户提交的命令转换为 MapReduce 任务去执行,从而实现关系型数据库和 Hadoop 的相互导入/导出。
- 在 Sqoop 2 中,引入了 Sqoop 服务端,对 Connector 实现了集中的管理,完善了权限管理机制,支持多种交互方式:命令行、Web UI 和 REST API。
使用建议:在实际使用过程中发现,Sqoop 1 的稳定性要优于 Sqoop 2,Sqoop 2 中有很多未知的问题。所以建议大家在使用时优先选择 Sqoop 1
(2)相对来说,Sqoop 1 更加简洁,轻量级。但是在安全性能方面 Sqoop 1 不如 Sqoop 2。
- 在 Sqoop 1 中,经常用脚本的方式将 Hadoop 中的数据导入 MySQL,或者将 MySQL 数据导入Hadoop。此时在脚本中要显式指定 MySQL 数据库的用户名和密码,安全性不是太完善。
- 在 Sqoop 2 中,如果通过命令行方式进行访问,则有一个输入密码的交互过程,输入的密码信息不会直接暴露出来。
说明:不过一般使用 Sqoop 1 也没有什么问题,因为在生产环境下访问 MySQL 时,是需要申请访问权限的,就算你知道 MySQL 的用户名和密码,但是你没有权限访问 MySQL 的那台机器,所以这样也是安全的,只要运维人员把权限控制到位就可以了。
3,Sqoop 1 的架构分析
(1)Sqoop 1 仅使用了一个 Sqoop 客户端,属于 Hadoop 生态系统中架构最简单的框架了。
(2)Sqoop 1 中产生的 MapReduce 任务只有 Map 阶段没有 Reduce 阶段,因为数据读取和数据转换都在 Map 阶段执行。
4,Sqoop 2 架构分析
(1)Sqoop 2 中引入了服务端,所以 Sqoop 2 的架构比 Sqoop 1 的架构复杂。
(2)Sqoop 2 中产生的 Mapreduce 任务既有 Map 阶段也有 Reduce 阶段,数据读取在 Map 阶段执行,数据转换在 Reduce 阶段执行,这样便于扩展。
5,Sqoop 核心功能架构分析
(1)以 Sqoop 1 版本为例,Sqoop 中的两大核心功能是导入和导出:
- 导入:从关系型数据库将数据导入 Hadoop 中。
- 导出:从 Hadoop 中将数据导出到关系型数据库中。
(2)Sqoop 导入功能的流程如下图所示:
(3)Sqoop 导出功能的流程如下图所示:
6,Sqoop 1 和 Sqoop 2 的优缺点对比
(1)Sqoop 1 优缺点:
- 优点:架构非常简单。
- 缺点:命令行方式需要配置过多的参数,容易出错,格式紧耦合,安全机制不够完善。
(2)Sqoop 2 优缺点:
- 优点:支持多种交互方式(命令行、Web UI、REST API),Conncetor 集中化管理,所有的链接被安装在 Sqoop 服务端上,拥有完善权限管理机制。
- 缺点:架构稍复杂,配置较烦琐。
附:安装配置
1,准备工作
要使用 Sqoop,除需要 JDK(建议使用 JDK 1.8 版本)外,还需要保证 Sqoop 所在的机器能正常操作 Hadoop 集群,因为 Sqoop 底层会将命令转换为 MapReduce 代码,然后将其提交到 Hadoop 集群中去执行。
2,下载安装包
wget https://archive.apache.org/dist/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
(2)然后将 Sqoop 安装包解压即可:
tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
(3)最后将解压出来的文件夹拷贝到指定目录(这个可以根据习惯调整目录的位置):
mv sqoop-1.4.7.bin__hadoop-2.6.0 /usr/local/sqoop
3,修改配置
(1)首先进入 sqoop 的 conf 目录:
cd /usr/local/sqoop/conf
(2)接着执行如下命令修改配置文件的名称:
mv sqoop-env-template.sh sqoop-env.sh
(3)然后编辑 profile 文件:
vi /etc/profile
(4)在末尾处添加如下 SQOOP 环境变量参数后保存退出:
export SQOOP_HOME=/usr/local/sqoop export PATH=$SQOOP_HOME/bin:$PATH
(5)最后执行如下命令让配置生效:
source /etc/profile
4,MySQL 相关工作
(1)假设我们需要使用 Sqoop 操作 MySQL,所以需要把 MySQL 的驱动程序 Jar 包添加到 Sqoop 的 lib 目录下(其他数据库同理)。
(2)同时我们还需要开放 MySQL 的远程访问权限,这样Hadoop 集群中的机器才可以连接远程机器上的 MySQL 服务。具体操作步骤可以参考我之前写的文章:
全部评论(0)