博客
关于我
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不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
    查看>>
    MySQL不同字符集及排序规则详解:业务场景下的最佳选
    查看>>
    Mysql不同官方版本对比
    查看>>
    MySQL与Informix数据库中的同义表创建:深入解析与比较
    查看>>
    mysql与mem_细说 MySQL 之 MEM_ROOT
    查看>>
    MySQL与Oracle的数据迁移注意事项,另附转换工具链接
    查看>>
    mysql丢失更新问题
    查看>>
    MySQL两千万数据优化&迁移
    查看>>
    MySql中 delimiter 详解
    查看>>
    MYSQL中 find_in_set() 函数用法详解
    查看>>
    MySQL中auto_increment有什么作用?(IT枫斗者)
    查看>>
    MySQL中B+Tree索引原理
    查看>>
    mysql中cast() 和convert()的用法讲解
    查看>>
    mysql中datetime与timestamp类型有什么区别
    查看>>
    MySQL中DQL语言的执行顺序
    查看>>
    mysql中floor函数的作用是什么?
    查看>>
    MySQL中group by 与 order by 一起使用排序问题
    查看>>
    mysql中having的用法
    查看>>
    MySQL中interactive_timeout和wait_timeout的区别
    查看>>