写点什么

大数据 -21 Sqoop 数据迁移 ETL 工具 MySQL 与 Hive 数据互相迁移 导入导出

作者:武子康
  • 2025-06-25
    美国
  • 本文字数:2294 字

    阅读完需:约 8 分钟

大数据-21 Sqoop 数据迁移 ETL工具 MySQL与Hive数据互相迁移 导入导出

点一下关注吧!!!非常感谢!!持续更新!!!

🚀 AI 篇持续更新中!(长期更新)

目前 2025 年 06 月 16 日更新到:AI 炼丹日志-29 - 字节跳动 DeerFlow 深度研究框斜体样式架 私有部署 测试上手 架构研究,持续打造实用 AI 工具指南!📐🤖

💻 Java 篇正式开启!(300 篇)

目前 2025 年 06 月 25 日更新到:Java-54 深入浅出 分布式服务 基本概念 对比集群 常见模式 通信方式 三态详解 MyBatis 已完结,Spring 已完结,Nginx 已完结,Tomcat 已完结,分布式服务正在更新!深入浅出助你打牢基础!

📊 大数据板块已完成多项干货更新(300 篇):

包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!目前 2025 年 06 月 13 日更新到:大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT 案例 详解


章节内容

上一节我们已经完成了:


  • Flume 采集数据

  • Flume 3 个 Agent 编写

  • Flume 双写:本地+HDFS

背景介绍

这里是三台公网云服务器,每台 2C4G,搭建一个 Hadoop 的学习环境,供我学习。


  • 2C4G 编号 h121

  • 2C4G 编号 h122

  • 2C2G 编号 h123


注意事项

Apache Sqoop 于 2021 年 6 月迁入 Attic。Apache Sqoop 的使命是创建和维护与 Apache Hadoop 和结构化数据存储相关的大规模数据传输软件。虽然项目已经可能过时,但是如果你的时间充裕的话,可以适当地学习一下,可能会对你有一定的帮助的!!!

Sqoop 介绍

Sqoop 是一款开源的工具,主要用于在 Hadoop(Hive) 与 传统数据库(MySQL 等)之间进行数据的传递。可以将关系型数据库:(MySQL 等)中的数据导入到 HDFS 中,可以将 HDFS 中的数据导入到传统数据库中。


  • 从关系型数据库导入数据到 Hadoop(HDFS、Hive、HBase)

  • 将 Hadoop 上的数据导出回关系型数据库


Sqoop 项目开始与 2009 年,最早是 Hadoop 的一个第三方模块,后来为了让使用者快速部署,Sqoop 独立成为了 Apache 的项目。


它将导入或导出命令转换为 MapReduce 程序来实现。


核心用途

  • 数据导入:将关系数据库的数据导入 HDFS、Hive、HBase 等

  • 数据导出:将 Hadoop 系统中的数据导出回 RDBMS

  • 批量传输:支持大批量并行传输,提高效率

  • 数据仓库同步:与 Hive 集成,方便大数据分析

工作原理

生成 MapReduce 任务:


  • Sqoop 本质上通过自动生成 MapReduce 程序完成数据传输,每个 mapper 处理部分数据。


数据并行导入/导出:


  • 读取数据库元数据(表结构、主键等)

  • 将导入任务划分成多个 mapper,每个 mapper 连接数据库并读取数据分片


支持多种目标系统:


  • 输入端:MySQL、Oracle、PostgreSQL、SQL Server 等

  • 输出端:HDFS、Hive、HBase、Avro、Parquet、SequenceFile 等


+------------------+           +--------------+           +----------------+| 关系型数据库     | ← JDBC →  |   Sqoop CLI  | → MR Job →| Hadoop/Hive/HBase|+------------------+           +--------------+           +----------------+
复制代码

核心命令

这里放几个示例

导入 MySQL 表到 HDFS

sqoop import \  --connect jdbc:mysql://localhost/db \  --username root \  --password 123456 \  --table employees \  --target-dir /user/hadoop/employees \  --num-mappers 4
复制代码

从 Hive 导出数据回数据库

sqoop export \  --connect jdbc:mysql://localhost/db \  --username root \  --password 123456 \  --table employees \  --export-dir /user/hive/warehouse/employees
复制代码

限制和缺点

  • 基于 MapReduce,速度有限:不适合实时场景,启动和调度延迟较大

  • JDBC 驱动依赖:需要手动提供 JDBC 驱动包

  • 停止维护(已进入孵化期):Apache 已将 Sqoop 停止活跃开发,未来建议转向新工具

代替工具推荐

  • Apache NiFi:更灵活可视化,支持实时数据流

  • Apache Flink CDC:实时、增量同步,基于变更数据捕获

  • Apache Gobblin:大规模数据管道,支持多数据源

  • Airbyte / Debezium:新兴开源同步工具,增量+实时同步,

  • Spark + JDBC:自定义能力强,用 Spark 读取/写入数据库更灵活

Sqoop 的场景

  • 日常 批量导入 数据,如每天夜间从数据库同步数据到 Hadoop 分析平台

  • 将 Hive/HDFS 上的分析结果 导出回数据库 供前端报表系统使用

  • 不关心“实时性”,容忍导入/导出延迟数分钟到数小时的离线场景

Sqoop 下载

下载 1.4.7 版本,这是最后一个稳定的版本了。后续项目就迁移了。


http://www.apache.org/dyn/closer.lua/sqoop/
复制代码

下载解压

我选择了 h122 机器,对其进行测试。



tar zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gzmv sqoop-1.4.7.bin__hadoop-2.6.0/ ../servers/sqoop-1.4.7/
复制代码

环境变量

vim /etc/profile
复制代码


向其中写入如下内容


# sqoopexport SQOOP_HOME=/opt/servers/sqoop-1.4.7export PATH=$PATH:$SQOOP_HOME/bin
复制代码



退出保存,并且刷新环境变量。

修改配置

cd $SQOOP_HOME/conf
复制代码



我们需要修改默认的配置


cp sqoop-env-template.sh sqoop-env.sh
vim sqoop-env.sh
复制代码


写入如下的内容:


export HADOOP_COMMON_HOME=/opt/servers/hadoop-2.9.2export HADOOP_MAPRED_HOME=/opt/servers/hadoop-2.9.2export HIVE_HOME=/opt/servers/hive-2.3.9
复制代码


修改结果如下图:


测试结果

控制台测试:


sqoop version
复制代码


额外配置

JDBC 配置

JDBC 驱动需要拷贝到 lib 目录下,由于当前节点是我的 Hive 节点,之前我已经拷贝过 JDBC 驱动了,这里我从 Hive 的目录直接拷贝过来即可。


cp $HIVE_HOME/lib/mysql-connector-java-8.0.19.jar $SQOOP_HOME/lib
复制代码


Hive 配置

Hive 驱动也是,如果我们需要链接到 Hive,那也需要拷贝一些支持库过来。


cp $HIVE_HOME/lib/hive-*-2.3.9.jar $SQOOP_HOME/lib/
复制代码


Hadoop 配置

Hadoop 配置同理,这里缺一个 Jar 包,拷贝一下过来。(不然后续会报错!)


cp $HADOOP_HOME/share/hadoop/tools/lib/json-20170516.jar $SQOOP_HOME/lib
复制代码


发布于: 刚刚阅读数: 4
用户头像

武子康

关注

永远好奇 无限进步 2019-04-14 加入

Hi, I'm Zikang,好奇心驱动的探索者 | INTJ / INFJ 我热爱探索一切值得深究的事物。对技术、成长、效率、认知、人生有着持续的好奇心和行动力。 坚信「飞轮效应」,相信每一次微小的积累,终将带来深远的改变。

评论

发布
暂无评论
大数据-21 Sqoop 数据迁移 ETL工具 MySQL与Hive数据互相迁移 导入导出_大数据_武子康_InfoQ写作社区