Sqoop是个命令行工具,用来在Hadoop和rdbms之间传输数据。
以Hadoop的角度看待数据流向,从rdbms往Hadoop是导入用sqoop import命令,反之从hadoop往rdbms下发数据用sqoop export命令
以oracle hive为例子,命令举例:
sqoop import -D oraoop.jdbc.url.verbatim=true --hive-import --hive-overwrite --connect jdbc:oracle:thin:@192.168.1.10:1521:orcl --username usernamexx --password passwdxx --table WH_PRG.TB_JSQ_PRD_GRID_MDF -hive-database test --hive-table hivename --fetch-size 5000 --hive-drop-import-delims --null-string '\\N' --null-non-string '\\N' -m 1
sqoop export -D oraoop.jdbc.url.verbatim=true --connect "jdbc:oracle:thin:@192.168.1.10:1521:orcl" --username usernamexx --password passwdxx --table ORACLETABLE --export-dir /user/hive/warehouse/test.db/tablename/* --input-fields-terminated-by '\001' --input-lines-terminated-by '\n' --input-null-string '\\N' --input-null-non-string '\\N' -m 1
注意:
oracle表名大写,hive表名保持和创建表时候的大小写,建表是大写,这儿就大写,建表时候小写,这儿就小写
-m 1表示并行度,根据oracle库的性能自行决定
导入的时候是默认覆盖,如果hive中有同名表,会自动删除重建
导出的时候是追加,要先在oracle测建好空表,而且再次导入时候要把原来的内容清空,否则因为是追加数据会产生重复数据,字段顺序要对齐,否则可能产生列的错位
附1:Sqoop导入常规参数意思
参数 参数名称
others 插件命令附加参数
target-dir 导入HDFS的目标路径
delete-target-dir 如果指定目录存在,则先删除掉
fetch-size 从数据库中批量读取记录数
split-by 按照指定列去分割数据
columns 从表中导出指定的一组列的数据
null-string 字符串类型null时转义为
null-non-string 非字符串类型null时转义为
query 查询语句
where 查询条件
direct 使用直接导出模式(优化速度)
warehouse-dir HDFS存放表的根路径
append 将数据追加到HDFS上一个已存在的数据集上
as-avrodatafile 将数据导入到Avro
as-sequencefile 将数据导入到SequenceFile
as-textfile 将数据导入到普通文本文件(默认)
boundary-query 边界查询,用于创建分片(InputSplit)
direct-split-size 分割输入stream的字节大小(在直接导入模式下)
inline-lob-limit 设置内联的LOB对象的大小
compress 启用压缩
compression-codec 指定Hadoop的codec方式(默认gzip)
incremental mode模式
last-value 指定自从上次导入后列的最大值
connect 指定JDBC连接字符串
connection-manager 指定要使用的连接管理器类
driver 指定要使用的JDBC驱动类
username 设置认证用户名
password 设置认证密码
verbose 打印详细的运行信息
connection-param-file 可选,指定存储数据库连接参数的属性文件
hadoop-home hadoop-home的路径
enclosed-by 字段值前后加上指定的字符
escaped-by 双引号作转义处理
fields-terminated-by 字段分隔符
lines-terminated-by 行分隔符
optionally-enclosed-by 强制给字段值前后都加上指定符号
mysql-delimiters Mysql默认的分隔符
input-enclosed-by &n