sqoop导入导出数据
概要描述
此文档旨在介绍sqoop操作inceptor连接其他数据库的导入导出功能
详细说明
1 添加驱动
1.1 将相应的数据库驱动放置TDH-CLIENT/sqoop/lib 下
以oracle为例:
2 source TDH-Client/init.sh
2.1 没有开kerberos执行:export HADOOP_USER_NAME=hive
2.2 开了kerberos执行:kinit hive
3 sqoop通用参数说明
–username 源数据库名称
–password 密码
–connect 数据库JDBC连接串
–query SQL语句,其中 where \$CONDITIONS 是固定写法
–target-dir 写入HDFS目录 后面跟的HDFS目录需要确认用户有写权限
-m -m 4 map个数,抽数的线程数,默认为4 当-m大于1时,需要指定–split-by 字段
–split-by –split-by id 数据划分列,默认为主键
–fetch-size –fetch-size 单次去多少条记录 一般取1000 可以不用
–null-string –null-string ‘\N’ string类型的空值
–null-non-string –null-non-string ‘\N’ 非string类型的空值
–delete-target-dir –delete-target-dir 导入数据前,清空hdfs目录
–field-terminated-by –field-terminated-by ‘\01’ 列分隔符
–hive-drop-import-delims 去除^A \n \r 等特殊字符
–append –append 是否设置为追加增量的方式导入,sqoop将把数据先导入到一个临时目录中,然后重新给文件命名到一个正式的目录中,以避免和该目录中已存在的文件重名。
-z -z,–compress 压缩格式,默认为gzip
oracle
1.4 列出XE下所有的表
sqoop list-tables --connect "jdbc:oracle:thin:@172.16.2.174:1521:XE" --username xxxx --password xxxx
1.5 导出表xxxx.TEST (用户名和表名要大写,orc事物表需先转换为text表)
inceptor原表:
sqoop export --connect "jdbc:oracle:thin:@172.22.44.1:1521:orcl" --username jane --password 123 --table tp --export-dir /inceptor1/user/hive/warehouse/default.db/hive/t3 --columns id,name --staging-table t1 --clear-staging-table -fields-terminated-by "\\01" --null-string '\\N' --null-non-string '\\N'
oracle最终表数据:
1.6 导入表
导入inceptor必须先导入hdfs
oracle原表数据:
sqoop import --connect "jdbc:oracle:thin:@172.22.44.1:1521:orcl" --username jane --password 123 --target-dir /tmp/jane -m 1 --query "select * from tp where \$CONDITIONS" --fields-terminated-by "\\01" --hive-drop-import-delims --null-string '\\N' --null-non-string '\\N'
执行后hdfs文件存储结构:
建外表接收hdfs数据:
CREATE EXTERNAL TABLE user_info_tab (
id STRING,
name string
)LOCATION 'hdfs:/tmp/jane';
其他信息
在sqoop抽取过程中,建议使用一下范本,能避免很多错误:
–fields-terminated-by "\01"
–hive-drop-import-delims
–null-string ‘\N’
–null-non-string ‘\N’