Sqoop
一个在Hadoop和关系型数据库之间高效传输数据的工具
最新稳定版1.4.7(Sqoop2不建议生产使用)
已经从Apache毕业
本质其实只是一个命令行工具
生产中基本都是 在拼接Sqoop命令完成数据的导入导出
底层工作机制:导入导出 在底层实际被翻译为MapReduce程序来实现,主要是对MR的 InputFormat 和 OutputFormat 进行定制
学习前提:linux常用命令 RDBMS基操 Hadoop用途和基操
安装Sqoop
后续的jar包都放在lib目录即可
一、sqoop-import
1.简单说明
这个命令基本也是使用最多的,生产上一般会把关系型数据库的数据通过sqoop import导入到数仓
sqoop import只能同步单表数据到HDFS,表的每一行对应HDFS的一行记录
文件格式:存储可以为文本文件(每行一条记录),或以二进制表示形式存储为 Avro 或 SequenceFiles
sqoop import-all-tables 命令可以多表一起同步 。 sqoop-import & sqoop import是一样的
2.命令参数
--connect <jdbc-uri>
--connection-manager <class-name> 指定要使用的连接管理器类
--driver com.mysql.jdbc.Driver / com.microsoft.jdbc.sqlserver.SQLServerDriver
--hadoop-mapred-home <dir>
--password-file 虽然安全但是不常用,一般集群都是内网
-P 不常用
--password <password> 常用
--username <username>
--verbose 工作时打印更多信息
--relaxed-isolation 将连接事务隔离设置为读取未提交的映射器 (默认读已提交)
其他参数:
--append 将数据追加到 HDFS 中的现有数据集
--as-avrodatafile 将数据导入 Avro 数据文件
--as-sequencefile 将数据导入SequenceFiles
--as-parquetfile 将数据导入 Parquet 文件
--as-textfile 以纯文本形式导入数据(默认)
--columns <col,col,col…> 需要从表中导入的列
--delete-target-dir 删除导入目标目录(如果存在)
--direct 如果数据库存在,则使用直接连接器
--fetch-size <n> 一次从数据库中读取的条目数
-m,--num-mappers <n> 使用n个map任务并行导入
-e,--query <statement> 导入语句的查询结果
--table <table-name> 需要导入的源表
--target-dir <dir> HDFS目的地
--where <where clause> 在导入期间使用的WHERE子句
-z,--compress 启用压缩
--compression-codec <c> 使用hadoop编解码器(默认gzip)
--null-string <null-string> 要为字符串列的空值写入的字符串
--null-non-string <null-string> 要为非字符串列的空值写入的字符串
--split-by <column-name> 用于拆分工作单元的表格列
--split-limit <n> 每个分割大小的上限。这仅适用于整数和日期列。对于日期或时间戳字段,它以秒为单位计算。
--autoreset-to-one-mapper 表没有主键而且你也没有配置 --split-by 拆分列,这时只能全表单个map读数据了
--null-string和-null-non-string参数是可选的。如果未指定,则默认使用字符串"null&