本文是大数据系列第 21 篇,介绍 Sqoop 数据迁移 ETL 工具的原理与安装配置。
Sqoop 是什么
Apache Sqoop(SQL to Hadoop)是专为在关系型数据库(MySQL、Oracle 等)与 Hadoop 生态(HDFS、Hive、HBase)之间高效传输数据而设计的批量 ETL 工具。
注意:Apache Sqoop 已于 2021 年 6 月迁入 Attic,不再主动维护。用于学习 ETL 概念和遗留系统集成仍有价值;新项目建议评估 Flink CDC、DataX 等替代方案。
核心能力:
- 将关系型数据库数据导入到 HDFS / Hive / HBase
- 将 Hadoop 分析结果导出回 RDBMS
- 自动转换为 MapReduce 程序,支持多 Mapper 并行传输
工作原理
Sqoop 接收导入/导出命令后,会读取数据库元数据,将任务拆分给多个 Mapper 并行执行。每个 Mapper 通过 JDBC 连接数据库,负责拉取一个数据分片,最终汇总写入 HDFS 或 Hive。
MySQL → Sqoop → MapReduce Job (多 Mapper) → HDFS / Hive
ETL 三阶段
| 阶段 | 说明 |
|---|---|
| Extract(抽取) | 通过 JDBC/API/文件系统拉取原始数据 |
| Transform(转换) | 数据清洗、格式标准化、业务规则应用 |
| Load(加载) | 写入 HDFS、Hive 或其他目标系统 |
安装配置
1. 下载与解压
使用最终稳定版 1.4.7:
tar zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
mv sqoop-1.4.7.bin__hadoop-2.6.0/ /opt/servers/sqoop-1.4.7/
2. 配置环境变量
export SQOOP_HOME=/opt/servers/sqoop-1.4.7
export PATH=$PATH:$SQOOP_HOME/bin
3. 配置 sqoop-env.sh
export HADOOP_COMMON_HOME=/opt/servers/hadoop-2.9.2
export HADOOP_MAPRED_HOME=/opt/servers/hadoop-2.9.2
export HIVE_HOME=/opt/servers/hive-2.3.9
4. 拷贝依赖 JAR
# MySQL JDBC 驱动
cp $HIVE_HOME/lib/mysql-connector-java-8.0.19.jar $SQOOP_HOME/lib
# Hive 相关库
cp $HIVE_HOME/lib/hive-*-2.3.9.jar $SQOOP_HOME/lib/
# JSON 工具库
cp $HADOOP_HOME/share/hadoop/tools/lib/json-20170516.jar $SQOOP_HOME/lib
5. 验证安装
sqoop version
正常输出版本信息则安装成功。
快速示例
MySQL → HDFS 导入:
sqoop import \
--connect jdbc:mysql://h122.wzk.icu:3306/mydb \
--username root \
--password 123456 \
--table employees \
--target-dir /user/hadoop/employees \
--num-mappers 4
HDFS → MySQL 导出:
sqoop export \
--connect jdbc:mysql://h122.wzk.icu:3306/mydb \
--username root \
--password 123456 \
--table employees \
--export-dir /user/hive/warehouse/employees
现代替代方案
Sqoop 已停止维护,新项目推荐考虑:
- Apache Flink CDC —— 基于 binlog 的实时增量同步
- DataX —— 阿里开源,支持丰富数据源
- Apache NiFi —— 可视化数据流编排
- Debezium —— Kafka Connect 生态的 CDC 方案
- SeaTunnel —— 批流一体的现代数据集成框架
下一篇将演示 Sqoop 将 MySQL 数据完整导入 HDFS 的全流程操作。