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-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'
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值