本文共 3397 字,大约阅读时间需要 11 分钟。
Sqoop 是一款开源工具,主要用于在 Hadoop 环境与传统数据库(如 MySQL、PostgreSQL 等)之间进行数据传输。它支持将关系型数据库的数据导入到 HDFS 中,也可以将 HDFS 数据导出到关系型数据库中。Sqoop 从 2009 年起作为 Apache 项目独立开发,目标是为用户提供一个快速部署和迭代的解决方案。目前,Sqoop 的最新版本是 1.99.7,需要注意的是版本与之前的不完全兼容,且 2.x 版本不推荐用于生产环境。
Sqoop 的核心工作原理是将导入或导出的命令转化为 MapReduce 程序实现。它主要通过定制 inputformat 和 outputformat 来实现数据的处理流程。在数据导入或导出过程中,Sqoop 会根据配置文件和用户提供的参数来决定如何处理数据,包括字段分隔符、行分隔符以及是否进行压缩等。
安装 Sqoop 需要先准备好 Java 和 Hadoop 环境。安装步骤大致如下:
为了确保 Sqoop 能够正确连接数据库,可以执行以下命令:
$ bin/sqoop list-databases --connect jdbc:mysql://hadoop102:3306/ --username root --password 000000
如果看到如 information_schemametastore mysqloozieperformance_schema
等输出,则表示数据库连接成功。
Sqoop 提供多种命令来实现数据导入功能。以下是几种常见的使用场景:
$ 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"
$ 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不会解析为变量。
$ 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"
$ 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 表中,可以使用以下命令:
$ 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 时,需要指定列族和行键:
$ 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 的一些常用命令和参数说明:
-incr
或 --incremental
: 使用增量导入模式,支持 append
和 lastmodified
模式。~/.sqoop
。Sqoop 提供了丰富的参数选项,用户可以根据实际需求选择合适的配置。通过合理配置和使用,Sqoop 能够有效地实现数据库与 Hadoop 集群之间的数据交换。
转载地址:http://fmtgz.baihongyu.com/