定义
Sqoop是一个ETL工具,能够在HDFS与传统关系型数据直接传输数据。可以使用Sqoop将MySQL或Oracle等RDBMS导入Hadoop分布式文件系统HDFS中,在Hadoop中处理数据,然后将数据导回RDMBS。
sqoop import
$ sqoop help import
用法:sqoop import [GENERIC-ARGS] [TOOL-ARGS]
常用参数:--
connect <jdbc-uri> 指定JDBC 连接字符串
--connect-manager <class-name> 指定要使用的连接管理器类
- -driver <class-name> 手动指定要使用的 JDBC 驱动程序类
--hadoop-mapred-home <dir> Override $HADOOP_MAPRED_HOME
--help 打印使用说明
--password-file 设置包含身份验证密码的文件的路径
-P 从console
--password <password> 设置认证密码
--username <username> 设置认证用户名
--verbose 在工作时打印更多信息
--hadoop-home <dir> 已弃用。覆盖 $HADOOP_HOME
[...]
通用 Hadoop 命令行参数:(
必须在任何特定于工具的参数之前)
支持的通用选项是
-conf <configuration file> 指定应用程序配置文件
-D <property=value> 使用给定的值property
-fs <local|namenode:port> 指定
名称节点 -jt <local|jobtracker:port> 指定作业跟踪器
-files <逗号分隔的文件列表> 指定要复制到映射减少集群的逗号分隔文件
-libjars <逗号分隔的 jar 列表>
-archives <逗号分隔的存档列表> 指定要在计算机上取消存档的逗号分隔存档。
一般的命令行语法是
bin/hadoop command [genericOptions] [commandOptions]
导入常用参数
参数 | 描述 |
---|
–connect | 指定 JDBC 连接字符串 |
–connection-manager | 指定要使用的连接管理器类 |
–driver | 手动指定要使用的 JDBC 驱动程序类 |
–hadoop-mapred-home
| 覆盖 $HADOOP_MAPRED_HOME |
–help | 打印使用说明 |
–password-file | 为包含认证密码的文件设置路径 |
-P | 从控制台读取密码 |
–password | 设置认证密码 |
–username | 设置认证用户名 |
–verbose | 工作时打印更多信息 |
–connection-param-file | 提供连接参数的可选属性文件 |
–relaxed-isolation | 将连接事务隔离设置为映射器未提交的读取。 |
导入控制参数
参数 | 描述 |
---|
–append | 将数据附加到 HDFS 中的现有数据集 |
–as-avrodatafile | 将数据导入 Avro 数据文件 |
–as-sequencefile | 将数据导入到 SequenceFiles |
–as-textfile | 以纯文本形式导入数据(默认) |
–as-parquetfile | 将数据导入 Parquet 文件 |
–boundary-query | 用于创建拆分的边界查询 |
–columns <col,col,col…> | 要从表中导入的列 |
–delete-target-dir | 删除导入目标目录(如果存在) |
–direct | 如果数据库存在,则使用直接连接器 |
–fetch-size | 一次从数据库读取的条目数。 |
–inline-lob-limit | 设置内联 LOB 的最大大小 |
-m,–num-mappers | 使用n个map任务并行导入,并行度默认为4,执行并行度是需要设置–split-by来指定列,如果不指定默认主键,如果主键和split-by都没有会报错。除非使用-m 1,指定一个任务执行导入操作。 |
-e,–query | 导入结果statement。 |
–split-by | 用于并行度拆分任务的列。不能与–autoreset-to-one-mapper选项一起使用 。 |
–autoreset-to-one-mapper | 如果表没有主键且未提供拆分列,则导入应使用一个映射器。不能与–split-by |
–table | RMDBS中的表名 |
–target-dir
| HDFS 目标目录 |
–warehouse-dir
| 表目标的 HDFS 父级 |
–where | 导入期间使用的 WHERE 子句 |
-z,–compress | 启用压缩 |
–compression-codec | 使用 Hadoop 编解码器(默认 gzip) |
–null-string | 要为字符串列的空值写入的字符串 |
–null-non-string | 要为非字符串列的空值写入的字符串 |
选项一起使用 。
导入示例
#! /bin/bash
import_data(){
$sqoop import \
--connect jdbc:oracle:thin:[数据库IP]:[端口号]:[库名] \
--username admin \
--passwarod-file [密码存储路径] \
--target-dir [HDFS存储路径]/$1\
--query "$2 and \$CONDITIONS" \
--num-mappers 1 \
--fields-terminated-by '\001' \
--hive-drop-import-delims \
--compress \
--compress-codec lzop \
--null-string '\\N' \
--null-non-string '\\n'
hadoop jar [lzo压缩jar路径]/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DsitributedLzoIndexer [HDFS存储路径]/$1
}
import_USER(){
import_data USER "SELECT UID,UNAME FROM USER "
}
case $1 in
"USER")
import_USER
;;
"all")
import_USER
;;
easc
sqoop export
$ sqoop export (generic-args) (export-args)
$ sqoop-export (generic-args) (export-args)
导出常用参数
参数 | 描述 |
---|
–connect | 指定 JDBC 连接字符串 |
–connection-manager | 指定要使用的连接管理器类 |
–driver | 手动指定要使用的 JDBC 驱动程序类 |
–hadoop-mapred-home
| 覆盖 $HADOOP_MAPRED_HOME |
–password-file | 为包含认证密码的文件设置路径 |
-P | 从控制台读取密码 |
–password | 设置认证密码 |
–username | 设置认证用户名 |
–verbose | 工作时打印更多信息 |
–connection-param-file | 提供连接参数的可选属性文件 |
–relaxed-isolation | 将连接事务隔离设置为映射器未提交的读取。 |
导出控制参数
参数 | 描述 |
---|
–columns <col,col,col…> | 要导出到表的列,不提供默认为全表的列 |
–direct | 使用直接导出快速路径 |
–export-dir
| 导出的 HDFS 源路径,路径数据是未压缩的行存储数据,必须参数 |
-m,–num-mappers | 使用n个map任务并行导出,默认采用4个任务进行导出,sqoop作业导出会分解成多个事务,某些作业出错,部分数据会提交成功。 |
–table | 要填充的表,必须参数 |
–call | 调用的存储过程 |
–update-key | 用于更新的锚列。如果有多于一列,请使用逗号分隔的列列表。 |
–update-mode | 指定在数据库中发现具有不匹配键的新行时如何执行更新。mode的值包括 updateonly(默认)和 allowinsert。 |
–input-null-string | 对于字符串列要解释为 null 的字符串,hive采用\N表示NULL值 |
–input-null-non-string | 对于非字符串列要解释为 null 的字符串 |
–staging-table | 在将数据插入目标表之前将在其中暂存数据的表。 |
–clear-staging-table | 表示可以删除暂存表中存在的任何数据。 |
–batch 使用批处理模式进行底层语句执行。 | |
导出示例
$sqoop evel \
--connect "jdbc:oracle:thin:@[IP地址]:[端口号]:[数据库名]" \
--username admin \
--password 123456 \
-e "truncate table admin.USER"
$sqoop export \
--connect "jdbc:oracle:thin:@[IP地址]:[端口号]:[数据库名]" \
--username admin \
--password 123456 \
--table "USER" \
--num-mappers 1 \
--export-dir [HDFS对应数据路径] \
--input-fields-terminated-by "\001" \
--input-null-string '\\N' \
--input-null-non-string '\\N'