文章目录:
Sqoop简介
Sqoop:由Apache开源的一个可以将Hadoop和关系型数据库(例如MySQL、Oracle等)中的数据相互转移的工具,一个轻量级实现关系型数据库和HDFS间数据转移的工具。
特点
来源 | Apache |
开发语言 | Java |
运行模式 | MapReduce |
分布式 | 支持 |
执行效率 | 高 |
数据源类型 | 仅支持关系型数据库和Hadoop相关存储系统 |
扩展性 | 一般 |
社区活跃度 | 活跃 |
资料完整度 | 完整 |
Sqoop版本对比
Sqoop有两种版本,完全不兼容,1.4.X为Sqoop1 , 1.99.X为Sqoop2
1版本中Sqoop只是一个客户端工具,负责将用户的命令转换为MR任务去执行,从而实现关系型数据库和Hadoop的相互数据传递。
2版本中Sqoop中引入了服务端,对Connector实现了集中管理,支持多种交互方式:命令行、WebUI和REST API。
相对来讲,1版本更加简洁,轻量级。但2版本更加安全。
Sqoop官方下载链接
Sqoop的应用
1.安装Sqoop
- 使用Xftp上传Sqoop的tar包到Linux上并解压缩
- 输入命令:
tar -zxvf sqoop-1.4.7.bin_hadoop-2.6.0.tar.gz
- 修改配置文件的名称:
cd sqoop-1.4.7.bin_hadoop-2.6.0/conf
mv sqoop-env-template.sh sqoop-env.sh
- 配置SQOOP_HOME环境变量。
vim /etc/profile
- 在末尾添加
export SQOOP_HOME=/opt/sqoop-1.4.7.bin_hadoop-2.6.0
export PATH=$SQOOP_HOME/bin:$PATH
- 添加MySQL驱动程序的Jar包
- 由于需要使用Sqoop操作MySQL,所以需要把MySQL的驱动程序Jar包添加到Sqoop的lib目录下,并验证是否成功添加MySQL的驱动包。
- 以MySQL 8.0.16为例,所添加的Jar包为mysql-connector-java-8.0.16.jar。
2.Sqoop参数
Sqoop命令的基本语法如下:
sqoop <command> [generic-args] [command-args]
import 语法示例:
sqoop import \
--connect <JDBC连接字符串> \
--username <用户名> \
--password <密码> \
--table <表名> \
--target-dir <目标目录> \
--fields-terminated-by <字段分隔符> \
--lines-terminated-by <行分隔符> \
--columns <列名列表>
export 语法示例:
sqoop export \
--connect <JDBC连接字符串> \
--username <用户名> \
--password <密码> \
--table <表名> \
--input-null-string <输入中表示NULL值的字符串> \
--input-null-non-string <输入中表示NULL值的非字符串值> \
--export-dir <导出数据的源目录> \
--input-fields-terminated-by <输入字段的分隔符> \
--input-lines-terminated-by <输入行的分隔符> \
--columns <列名列表>
Sqoop常用的命令选项
(1) 导入数据命令选项:
--connect | 指定数据库连接URL |
--username | 指定数据库用户名 |
--password | 指定数据库密码 |
--table | 指定要导入的数据库表名 |
--columns | 指定要导入的列 |
--target-dir | 指定导入数据的目标目录 |
--where | 指定导入数据的条件 |
--split-by | 指定用于拆分数据的列 |
--num-mappers | 指定并行导入的Mapper数量 |
--null-string | 指定数据库中表示NULL值的字符串 |
--null-non-string | 指定数据库中表示NULL值的非字符串值 |
(2) 导出数据命令选项:
--batch | 使用批量模式导出 |
--direct | 使用直接导出模式 |
--call | 导出数据调用的指定存储过程名 |
--table | 导出的目的表名称 |
--export-dir | 导出过程中HDFS的源路径 |
--update-key | 更新参考的列名称 |
--update-mode | 指定更新策略,包括updateonly,allowinsert |
--input-null-string | 指定输入中表示NULL值的字符串 |
--input-null-non-string | 指定输入中表示NULL值的非字符串值 |
--m | 使用n个map任务并行导出 |
--clear-staging-table | 清除工作区中临时存放的数据 |
(3) 通用命令选项:
--as-avrodatafile | 将数据导入/导出为Avro文件 |
--as-parquetfile | 将数据导入/导出为Parquet文件 |
--as-textfile | 将数据导入/导出为文本文件 |
--delete-target-dir | 在导入之前删除目标目录 |
--fields-terminated-by | 指定字段的分隔符 |
--verbose | 显示详细的调试信息 |
--compress | 启用压缩 |
--lines-terminated-by | 指定行的分隔符 |
--null-string | 指定输出中表示NULL值的字符串 |
--null-non-string | 指定输出中表示NULL值的非字符串值 |
--connection-manager | 指定要使用的连接管理器类 |