博客
关于我
Sqoop基础笔记——从小白到入门
阅读量:735 次
发布时间:2019-03-21

本文共 3397 字,大约阅读时间需要 11 分钟。

Sqoop 是一款开源工具,主要用于在 Hadoop 环境与传统数据库(如 MySQL、PostgreSQL 等)之间进行数据传输。它支持将关系型数据库的数据导入到 HDFS 中,也可以将 HDFS 数据导出到关系型数据库中。Sqoop 从 2009 年起作为 Apache 项目独立开发,目标是为用户提供一个快速部署和迭代的解决方案。目前,Sqoop 的最新版本是 1.99.7,需要注意的是版本与之前的不完全兼容,且 2.x 版本不推荐用于生产环境。

Sqoop 的工作原理

Sqoop 的核心工作原理是将导入或导出的命令转化为 MapReduce 程序实现。它主要通过定制 inputformat 和 outputformat 来实现数据的处理流程。在数据导入或导出过程中,Sqoop 会根据配置文件和用户提供的参数来决定如何处理数据,包括字段分隔符、行分隔符以及是否进行压缩等。

Sqoop 安装

安装 Sqoop 需要先准备好 Java 和 Hadoop 环境。安装步骤大致如下:

  • 下载与解压:从 Apache 官方网站下载最新版本的 Sqoop 并解压到指定目录。
  • 配置文件:将默认的配置文件进行重命名,并根据实际路径进行修改,确保 Sqoop 能够正确识别 Hadoop 和其他相关环境。
  • 拷贝 JDBC 驱动:将数据库的 JDBC 驱动拷贝到 Sqoop 的 lib 目录中,以便后续操作时能够正确连接数据库。
  • 验证安装:运行 Sqoop 帮助命令,查看是否正常输出管理命令。
  • 测试数据库连接

    为了确保 Sqoop 能够正确连接数据库,可以执行以下命令:

    $ bin/sqoop list-databases --connect jdbc:mysql://hadoop102:3306/ --username root --password 000000

    如果看到如 information_schemametastore mysqloozieperformance_schema 等输出,则表示数据库连接成功。

    数据导入

    Sqoop 提供多种命令来实现数据导入功能。以下是几种常见的使用场景:

  • 简单导入:将数据库中的数据全部导入 HDFS:
  • $ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 000000 --table staff --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by "\t"
    1. 部分导入:通过 SQL 查询条件-limit 测试:
    2. $ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 000000 --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by "\t" --query "SELECT name, sex FROM staff WHERE id <= 1 AND $CONDITIONS;"

      注意:条件后必须加上 $CONDITIONS,确保shell不会解析为变量。

      1. 导入指定列
      2. $ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 000000 --columns id,sex --table staff --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by "\t"
        1. 使用 WHERE 子句筛选数据导入
        2. $ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 000000 --table staff --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by "\t" --where "id=1"

          数据导入到 Hive

          将数据导入到 Hive 表中,可以使用以下命令:

          $ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 000000 --table staff --num-mappers 1 --hive-import --fields-terminated-by "\t" --hive-overwrite --hive-table staff_hive

          导入过程默认会将数据和临时文件存放在 /user/root/staff_hive 目录。

          数据导入到 HBase

          将数据导入到 HBase 时,需要指定列族和行键:

          $ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 000000 --table staff --columns "id,name,sex" --column-family "info" --hbase-create-table --hbase-row-key "id" --hbase-table "hbase_company" --num-mappers 1 --split-by id

          需要注意的是,Sqoop 1.4.6 支持的 HBase 版本较旧,建议手动创建表。

          数据导出

          从 HDFS 或 Hive 导出到数据库,使用如下命令:

          $ bin/sqoop export --connect jdbc:mysql://hadoop102:3306/company --username root --password 000000 --table staff --export-dir /user/hive/warehouse/staff_hive --input-fields-terminated-by "\t"

          脚本打包与运行

          为了便于多次执行相同的导入或导出任务,可以将 Sqoop 命令打包为选项文件,并执行:

          $ mkdir opt$ vi opt/job_HDFS2RDBMS.opt$ bin/sqoop --options-file opt/job_HDFS2RDBMS.opt

          常用命令与参数

          以下是 Sqoop 的一些常用命令和参数说明:

          • import:导入数据,默认使用 Hadoop MapReduce 进行处理。
            • -incr--incremental: 使用增量导入模式,支持 appendlastmodified 模式。
          • export:导出数据,支持从 HDFS、Hive、HBase 导出到数据库。
          • codegen:根据数据库表结构生成 Java 类并打包为 JAR 文件。
          • create-hive-table:创建 Hive 表,支持按需生成。
          • eval:执行 SQL 查询,测试数据库连接和 SQL 查询。
          • list-databaseslist-tables:列出数据库和表信息。
          • merge:将 HDFS 目录合并,适用于数据集成场景。
          • metastore:管理 Sqoop 的元数据存储,默认存储在 ~/.sqoop

          Sqoop 提供了丰富的参数选项,用户可以根据实际需求选择合适的配置。通过合理配置和使用,Sqoop 能够有效地实现数据库与 Hadoop 集群之间的数据交换。

    转载地址:http://fmtgz.baihongyu.com/

    你可能感兴趣的文章
    MySQL 日期时间类型的选择
    查看>>
    Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
    查看>>
    MySQL 是如何加锁的?
    查看>>
    MySQL 是怎样运行的 - InnoDB数据页结构
    查看>>
    mysql 更新子表_mysql 在update中实现子查询的方式
    查看>>
    MySQL 有什么优点?
    查看>>
    mysql 权限整理记录
    查看>>
    mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
    查看>>
    MYSQL 查看最大连接数和修改最大连接数
    查看>>
    MySQL 查看有哪些表
    查看>>
    mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
    查看>>
    MySql 查询以逗号分隔的字符串的方法(正则)
    查看>>
    MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
    查看>>
    mysql 查询,正数降序排序,负数升序排序
    查看>>
    MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
    查看>>
    mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
    查看>>
    mysql 死锁(先delete 后insert)日志分析
    查看>>
    MySQL 死锁了,怎么办?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>