Sqoop介绍
定义
Sqoop是一个ETL工具,能够在HDFS与传统关系型数据直接传输数据。可以使用Sqoop将MySQL或Oracle等RDBMS导入Hadoop分布式文件系统HDFS中,在Hadoop中处理数据,然后将数据导回RDMBS。
sqoop import
$ sqoop help import
用法:sqoop import [GENERIC-ARGS] [TOOL-ARGS]
常用参数:--
connect 指定JDBC 连接字符串
--connect-manager 指定要使用的连接管理器类
- -driver 手动指定要使用的 JDBC 驱动程序类
--hadoop-mapred-home Override $HADOOP_MAPRED_HOME
--help 打印使用说明
--password-file 设置包含身份验证密码的文件的路径
-P 从console
--password 设置认证密码
--username 设置认证用户名
--verbose 在工作时打印更多信息
--hadoop-home 已弃用。覆盖 $HADOOP_HOME
[...]
通用 Hadoop 命令行参数:(
必须在任何特定于工具的参数之前)
支持的通用选项是
-conf 指定应用程序配置文件
-D 使用给定的值property
-fs 指定
名称节点 -jt 指定作业跟踪器
-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 要从表中导入的列
–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存储路径]/
--query " and $CONDITIONS"
--num-mappers 1
--fields-terminated-by '01'
--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存储路径]/
}
import_USER(){
import_data USER "SELECT UID,UNAME FROM USER "
}
case 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 要导出到表的列,不提供默认为全表的列
–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 "01"
--input-null-string '\N'
--input-null-non-string '\N'
评论列表(0条)