博客
关于我
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 优化器 key_mysql – 选择*和查询优化器
    查看>>
    MySQL 优化:Explain 执行计划详解
    查看>>
    Mysql 会导致锁表的语法
    查看>>
    mysql 使用sql文件恢复数据库
    查看>>
    mysql 修改默认字符集为utf8
    查看>>
    Mysql 共享锁
    查看>>
    MySQL 内核深度优化
    查看>>
    mysql 内连接、自然连接、外连接的区别
    查看>>
    mysql 写入慢优化
    查看>>
    mysql 分组统计SQL语句
    查看>>
    Mysql 分页
    查看>>
    Mysql 分页语句 Limit原理
    查看>>
    MySql 创建函数 Error Code : 1418
    查看>>
    MySQL 创建新用户及授予权限的完整流程
    查看>>
    mysql 创建表,不能包含关键字values 以及 表id自增问题
    查看>>
    mysql 删除日志文件详解
    查看>>
    mysql 判断表字段是否存在,然后修改
    查看>>
    MySQL 到底能不能放到 Docker 里跑?
    查看>>
    mysql 前缀索引 命令_11 | Mysql怎么给字符串字段加索引?
    查看>>
    MySQL 加锁处理分析
    查看>>