本文是大数据系列第 21 篇,介绍 Sqoop 数据迁移 ETL 工具的原理与安装配置。

完整图文版(含截图):CSDN 原文 | 掘金

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 的全流程操作。