Sqoop数据迁移工具

概述

Apache Sqoop(SQL-to-Hadoop)项目旨在协助RDBMS与Hadoop之间进行高效的大数据交流。用户可以在 Sqoop 的帮助下,轻松地把关系型数据库的数据导入到 Hadoop 与其相关的系统 (如HBase和Hive)中;同时也可以把数据从 Hadoop 系统里抽取并导出到关系型数据库里。

​ Sqoop是一个在结构化数据和Hadoop之间进行批量数据迁移的工具,结构化数据可以是MySQL、Oracle等RDBMS。Sqoop底层用MapReduce程序实现抽取、转换、加载,MapReduce天生的特性保证了并行化和高容错率,而且相比Kettle等传统ETL工具,任务跑在Hadoop集群上,减少了ETL服务器资源的使用情况。在特定场景下,抽取过程会有很大的性能提升。

​ 如果要用Sqoop,必须正确安装并配置Hadoop,因依赖于本地的Hadoop环境启动MR程序;MySQL、Oracle等数据库的JDBC驱动也要放到Sqoop的lib目录下。

参数解析

复制代码
查看sqoop命令帮助文档
# 查看sqoop支持哪些操作
sqoop help

# 查看具体操作中有哪些参数可以指定
sqoop help import
sqoop help export

通用参数:

复制代码
--connect <jdbc-uri>: 连接RDBMS的jdbc连接字符串,例如:--connect jdbc:mysql:// MYSQL_SERVER:PORT/DBNAME。

--username <username>: 连接RDBMS所使用的用户名。

--password <password>: 连接RDBMS所使用的密码,明文。

--hadoop-home <hdir>: hadoop数据存储路径

--password-file <password-file>: 使用文件存储密码。

-p: 交互式连接RDBMS的密码。

导入参数

复制代码
--append :追加数据到HDFS已经存在的文件中。

--as-sequencefile :import序列化的文件。

--as-textfile :import文本文件 ,默认。

--columns <col,col,col...> :指定列import,逗号分隔,比如:--columns "id,name"。

--delete-target-dir :删除存在的import目标目录。

--direct :直连模式,速度更快(HBase不支持)

--split-by :分割导入任务所使用的字段,需要明确指定,推荐使用主键。

--inline-lob-limit < n > :设置内联的BLOB对象的大小。

--fetch-size <n> :一次从数据库读取n个实例,即n条数据。

-e,--query <statement> :构建表达式<statement>执行。

--target-dir <d> :指定HDFS目标存储目录。

--warehouse-dir <d> :可以指定为-warehouse-dir/user/hive/warehouse/即导入数据的存放路径,如果该路径不存在,会首先创建。

--table <table-name> :将要导入到hive的表。

--where <where clause> :指定where从句,如果有双引号,注意转义 \$CONDITIONS,不能用or,子查询,join。

-z,--compress :开启压缩。

--null-string <null-string> :string列为空指定为此值。

--null-non-string <null-string> :非string列为空指定为此值,-null这两个参数are optional, 如果不设置,会指定为"null"。

--autoreset-to-one-mapper :如果没有主键和split-by用one mapper import (split-by和此选项不共存)。

-m,--num-mappers <n> :建立n个并发执行import,默认4个线程。

Hive参数:

复制代码
--hive-database <database-name> :指定要把HDFS数据导入到哪个Hive库。

--hive-table <table-name> :设置到Hive当中的表名。

--hive-delims-replacement <arg> :导入到hive时用自定义的字符替换掉\n, \r, and \01。

--hive-drop-import-delims :导入到hive时删除字段中\n, \r,\t and \01等符号;避免字段中有空格导致导入数据被截断。

--hive-home <dir> :指定Hive的存储目录。

--hive-import :将HDFS数据导入到Hive中,会自动创建Hive表,使用hive的默认分隔符。

--hive-overwrite :对Hive表进行覆盖操作(需配合--hive-import使用,如果Hive里没有表会先创建之),不然就是追加数据。

--hive-partition-key <partition-key> :hive分区的key。

--hive-partition-value <partition-value> :hive分区的值。

--map-column-hive <arg> :类型匹配,SQL类型对应到hive类型。

--create-hive-table :自动推断表字段类型直接建表,hive-overwrite功能可以替代掉了,但Hive里此表不能存在,不然操作会报错。

Sqoop与DataX对比

复制代码
总结
1.DataX和Kettle都是通用的数据集成工具,支持多种数据源和目标,提供了强大的数据转换和清洗功能。
2.DataX和Kettle的区别在于开发者和用户群体,DataX在阿里巴巴内部得到广泛应用,而Kettle则是一个独立的开源项目。
3.Sqoop主要用于Hadoop和关系型数据库之间的数据传输,适用于大规模数据的导入导出任务。

参考资料:

https://zhuanlan.zhihu.com/p/444568213

http://blog.51yip.com/hadoop/2054.html

https://blog.csdn.net/YuannaY/article/details/131427195

https://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html

相关推荐
逸模5 小时前
告别熬夜手工整理台账,逸模智能归集实现项目数据自动化存档
大数据·运维·人工智能·笔记·其他·信息可视化·自动化
AOwhisky6 小时前
MySQL 学习笔记(第四期):SQL 语言之多表查询
linux·运维·网络·数据库·笔记·学习·mysql
小红卒6 小时前
mysql之udf提权
数据库·mysql·网络安全
Trouvaille ~7 小时前
【Redis篇】Redis 哨兵(Sentinel):高可用自动故障转移
数据库·redis·缓存·中间件·sentinel·高可用·哨兵
qfljg7 小时前
oracle 迁移到postgres
数据库·oracle
rockey6277 小时前
基于AScript的SQL脚本语言发布啦!
sql·c#·.net·script·expression·动态脚本
audyxiao0017 小时前
ICLR 2026论文分享 | WorldGym:用世界模型打造机器人策略评估新范式
大数据·人工智能·大模型·智能体·世界模型
giaz14n9X7 小时前
Redis 分布式锁进阶第五十七篇
数据库·redis·分布式
剑神一笑8 小时前
Linux ls 命令深度解析:从目录遍历到颜色输出的实现原理
linux·服务器·数据库
Maynor9968 小时前
Codex API 网关迁移与流量优化实战
数据库·oracle