欢迎光临
我们一直在努力

Sqoop 快速入门指南(在关系型数据库之间高效批量传输数据)

Sqoop是Apache开源工具,专用于关系型数据库(如MySQL)与Hadoop(HDFS/Hive)间的数据传输。


核心功能包括:

  • 数据导入(import):支持全表导入、条件过滤(WHERE)、自定义SQL查询,可指定分隔符和压缩格式
  • 数据导出(export):将HDFS数据写回关系库
  • Hive集成:直接导入数据到Hive表并自动建表
  • 增量导入:支持基于ID递增(append)和时间戳(lastmodified)两种模式
  • 常用管理命令:数据库/表查看、作业管理等
  • 典型应用场景:

    • MySQL→HDFS全量迁移
    • HDFS→MySQL数据回写
    • 增量数据同步
    • 与Hive数据仓库集成

    注意事项:需配置JDBC驱动、注意字符编码问题,并行导入时需指定切分字段。通过-m参数控制并行度,split-by指定分片键,可显著提升传输效率。


    Sqoop 快速入门指南

    Sqoop 是 Apache 开源的数据迁移工具,专门用于在关系型数据库(如 MySQL)和 Hadoop(HDFS/Hive)之间高效批量传输数据。

    Sqoop 本身并没有官方的、专门为其开发的图形化操作界面软件。


    Sqoop 本质上是一个将导入/导出命令翻译成 MapReduce 程序的命令行工具。


    这个特点部分来自于其早期设计定位,也与其运行机制(每个任务都独立提交、没有服务端进程)有关。


    不过,在大数据生态中,有几个优秀的工具可以通过图形化方式来操作和管理 Sqoop 任务。


    Hue(Hadoop User Experience)是一个开源的 Apache Hadoop UI 系统,它集成了Sqoop 2 编辑器,提供图形化界面来创建和管理数据迁移任务。(配置太麻烦,放弃)


    Pentaho 是一个大数据分析平台,它的可视化设计工作室(Visual Design Studio)已将 Sqoop 功能集成到图形界面中。(商用,要钱)


    Kettle 是绿色免安装的,直接在 Windows 上解压就能用。(推荐)


    一、核心命令结构

    Sqoop 主要提供两个核心命令:import(导入到 HDFS/Hive)和 export(导出到 MySQL)。

    bash

    # 导入:MySQL → HDFS/Hive
    sqoop import \\
    –connect jdbc:mysql://host:port/database \\
    –username user \\
    –password pass \\
    –table table_name \\
    –target-dir /hdfs/path

    # 导出:HDFS/Hive → MySQL
    sqoop export \\
    –connect jdbc:mysql://host:port/database \\
    –username user \\
    –password pass \\
    –table table_name \\
    –export-dir /hdfs/path


    二、导入操作(MySQL → HDFS)

    1. 全量导入整个表

    将 MySQL 的 employees 表完整导入到 HDFS:

    bash

    sqoop import \\
    –connect jdbc:mysql://localhost:3306/testdb \\
    –username root \\
    –password 123456 \\
    –table employees \\
    –target-dir /user/mumu/employees \\
    -m 4 \\
    –split-by id

    参数说明:

    参数说明
    -m / –num-mappers 并行 Map 任务数,默认 4
    –split-by 切分字段(通常是主键),用于并行导入
    –target-dir HDFS 目标目录
    –fields-terminated-by 字段分隔符,默认逗号

    2. 指定分隔符和压缩

    bash

    sqoop import \\
    –connect jdbc:mysql://localhost:3306/testdb \\
    –username root \\
    -P \\
    –table employees \\
    –target-dir /user/mumu/employees \\
    –fields-terminated-by '\\t' \\
    –compress \\
    –compression-codec snappy \\
    -m 4

    -P 会提示你交互式输入密码,比直接在命令行写更安全。

    3. 条件导入(WHERE 过滤)

    只导入部门编号为 10 的员工:

    bash

    sqoop import \\
    –connect jdbc:mysql://localhost:3306/testdb \\
    –username root \\
    –password 123456 \\
    –table employees \\
    –where "dept_id = 10" \\
    –target-dir /user/mumu/employees_dept10

    4. 自定义 SQL 导入

    bash

    sqoop import \\
    –connect jdbc:mysql://localhost:3306/testdb \\
    –username root \\
    –password 123456 \\
    –query "SELECT id, name, salary FROM employees WHERE salary > 50000 AND \\$CONDITIONS" \\
    –split-by id \\
    –target-dir /user/mumu/high_salary

    注意:使用 –query 时,必须指定 –target-dir,且查询中必须包含 \\$CONDITIONS 占位符。


    三、导入到 Hive

    直接导入到 Hive 表,省去手动建表:

    bash

    sqoop import \\
    –connect jdbc:mysql://localhost:3306/testdb \\
    –username root \\
    –password 123456 \\
    –table employees \\
    –hive-import \\
    –hive-table testdb.employees \\
    –create-hive-table \\
    -m 4

    参数说明:

    参数作用
    –hive-import 启用 Hive 导入
    –hive-table 指定目标 Hive 表(可带数据库名)
    –create-hive-table 自动创建 Hive 表
    –hive-overwrite 覆盖已有数据

    四、导出操作(HDFS → MySQL)

    将 HDFS 中的数据写回 MySQL:

    bash

    sqoop export \\
    –connect jdbc:mysql://localhost:3306/testdb \\
    –username root \\
    –password 123456 \\
    –table employees_backup \\
    –export-dir /user/mumu/employees \\
    –input-fields-terminated-by ',' \\
    -m 4

    参数说明:

    参数说明
    –export-dir HDFS 数据目录
    –input-fields-terminated-by HDFS 文件的字段分隔符
    –update-key 指定主键列,执行更新而非插入
    –update-mode updateonly 或 allowinsert

    五、增量导入

    1. Append 模式(基于递增 ID)

    bash

    sqoop import \\
    –connect jdbc:mysql://localhost:3306/testdb \\
    –username root \\
    –password 123456 \\
    –table orders \\
    –incremental append \\
    –check-column id \\
    –last-value 1000 \\
    –target-dir /user/mumu/orders

    只导入 id > 1000 的新数据。

    2. LastModified 模式(基于时间戳)

    bash

    sqoop import \\
    –connect jdbc:mysql://localhost:3306/testdb \\
    –username root \\
    –password 123456 \\
    –table orders \\
    –incremental lastmodified \\
    –check-column update_time \\
    –last-value "2024-01-01 00:00:00"

    只导入 update_time 晚于指定时间的数据。


    六、常用命令速查

    命令说明
    sqoop list-databases 列出数据库
    sqoop list-tables 列出表
    sqoop eval 执行 SQL 并查看结果
    sqoop job –create 创建保存的作业
    sqoop job –list 列出已有作业
    sqoop job –exec 执行作业

    示例:列出数据库

    bash

    sqoop list-databases \\
    –connect jdbc:mysql://localhost:3306/ \\
    –username root \\
    –password 123456


    七、常见问题

    错误解决方案
    ClassNotFoundException JDBC 驱动未放入 $SQOOP_HOME/lib
    Connection refused 检查 MySQL 服务状态和网络连通性
    Access denied 确认用户名和密码正确
    Hive 找不到表 确认 Hive 已启动且表存在
    MySQL 乱码 连接 URL 添加 ?useUnicode=true&characterEncoding=utf-8

    掌握上面的命令后,你就能用 Sqoop 完成常见的数据迁移任务了。

    赞(0)
    未经允许不得转载:171主机测评 » Sqoop 快速入门指南(在关系型数据库之间高效批量传输数据)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址