Sqoop 是一个设计用于在 Apache Hadoop 和结构化数据存储(如关系数据库)之间高效地传输大批量数据的工具。
从oracle全量数据迁移到hdfs
oracle无法进行多表导入hdfs 小编琢磨了很久 决定写一个脚本 循环导入 再调用sqoop命令 看以下操作:
一、明确小编使用组件以及版本
CDH-5.15.0-1.cdh5.15.0.p0.21
sqoop1
oracle
二、sqoop将oralce多表同时向hdfs全量导入脚本编写
下面展示一个 小编自己配置的脚本
。
// 直接上脚本
#!/bin/sh
#sqoop执行路径
export sqoop_path=/opt/cloudera/parcels/CDH-5.15.0-1.cdh5.15.0.p0.21/bin
#自定义的日志输出文件
export sqoop_logs=/var/log/sqoop.log
#检测该路径是否存在
#
if [ ! -e ${sqoop_path} ]
then
exit
else
echo "Directory exists !" >> $sqoop_logs
fi
#
#oracle数据库表 放你所有想导入的表名 以空格区分
tables=(JAVA PHP PYTHON HADOOP SQOOP SPARK FLINK HIVE USER TMP)
#连接配置
oracle_driver=jdbc:oracle:thin:@10.10.100.89.10:1521/gssy
#用户名
username=jiansuo
#密码
password=123456
#for循环遍历tables 然后sqoop调用
for table in ${tables[@]}
do
${sqoop_path}/sqoop import \
--connect ${oracle_driver} \
--username ${username} \
--password ${password} \
--target-dir /smxaq/YBJ/GSSY/SIMIS/${table}/ \ # hdfs 地址
--fields-terminated-by "," \
--lines-terminated-by "\n" \
--num-mappers 4 \
--table SIMIS.${table} \ # 我这里的SIMIS是我数据库下面的组名 没有可以不写
--compression-codec com.hadoop.compression.lzo.LzopCodec \ # lzo压缩
--autoreset-to-one-mapper \ # 无主键则选择一个map
--as-textfile
echo $table导入完毕
#判断sqoop执行结果,失败退出
if [ $? -ne 0 ]; then
exit
else
echo " ${table} Successfully !" >> $sqoop_logs
fi
done
hdfs已经有各级目录导入成功
注意一个参数 我上面没有提到过
// A code block
#sqoop 操作关系数据库的表,会被映射为一个java类 一个class文件 可以自定义地址
自己一定要知道默认地址在哪里 ,方便下游处理
--outdir /xxx/xxx/xxx #生成的java文件存放文职
三、查询oracle的所有表名我们可以这么做
select TABLE_NAME from ALL_TABLES WHERE OWNER=' xx '
将查询的表名 导出文档 最后使用Ctrl+H 把表名之间替换成空格就ok了
小编还有的别的教程和工作中遇到的问题解决方法 可以关注一下查看哦!!!
** 本次教程到此结束了,如果小伙伴在执行以上步骤遇到了问题,可以私信我,我随时都在