sqoop脚本导入将oracle数据库下的组的所有表数据导入hdfs

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了
在这里插入图片描述
小编还有的别的教程和工作中遇到的问题解决方法 可以关注一下查看哦!!!

** 本次教程到此结束了,如果小伙伴在执行以上步骤遇到了问题,可以私信我,我随时都在

猜你喜欢

转载自blog.csdn.net/Charlie_jun/article/details/106803362
今日推荐