Sqoop实用linux脚本

 

1、通用脚本
1.1、Sqoop导入DATADB数据到HIVE

sqoop_load_data.sh

#!/bin/bash
################################################################################
#脚本功能:通用脚本 SQOOP导入DATADB数据到HIVE 
#脚本参数:DATADB连接串 DATADB取数用户名 DATADB口令 DATADB表名 WHERE条件 HIVE库名 HIVE表名 
#编写日期:2024-01-22                                                          
#功能实现:                                                                    
#        1.通过sqoop程序将数据库中字段按条件导入到HIVE中
#        
#修    改:
#
################################################################################


#初始化用户变量
source $TEST_HOME/shell/config/bash_profile

#参数个数判断
if [ $# -ne 7 ];then
        echo "请输入参数:DATADB连接串 DATADB取数用户名 DATADB口令 DATADB表名 WHERE条件 HIVE库名 HIVE表名"
        echo "例如:sh sqoop_load_data.sh oracle:thin:@192.168.xx.xx:1521/database user password table_name \"1=1\" hive_db hive_table"
        echo "例如:sh sqoop_load_data.sh mysql://128.64.xxx.xxx:13306/database user password table_name \"1=1\" hive_db hive_table"
        exit 1
fi

#变量赋值
datadb_str=$1
datadb_user=$2
datadb_passwd=$3
datadb_table=$4
#datadb_pk=$5
condition=$5
hive_db=$6
hive_table=$7

start_time=`date +%s`

#按条件从DATADB拉取数据,导入Hive贴源层
sqoop import \
--connect jdbc:${datadb_str} \
--username ${datadb_user} \
--password ${datadb_passwd} \
--create-hive-table \
--table ${datadb_table} \
--delete-target-dir \
-m 1 \
--where "${condition}" \
--hive-overwrite \
--hive-import \
--null-string '\\N' \
--null-non-string '\\N' \
--target-dir ${HIVE_DIR}${hive_table} \
--hive-database ${hive_db} \
--hive-table ${hive_table} \
--hive-drop-import-delims 


if [ $? -ne 0 ]
then
echo "[ERROR][`date +"%Y-%m-%d %H:%M:%S"`]Failed sqoop load table ."
exit 1;
fi

end_time=`date +%s`
echo "[INFO][`date +"%Y-%m-%d %H:%M:%S"`]End load datadb ${datadb_str} ${datadb_table} to hive ${hive_db}.${hive_table}, execution time was `expr $end_time - $start_time` s"
exit 0;

1.2、通用脚本 SQOOP导出HIVE数据到DATADB

sqoop_export_data.sh

#!/bin/bash
################################################################################
#通用脚本:SQOOP导出HIVE数据到DATADB
#脚本名称:sqoop_export_data.sh                                              
#脚本功能:通过sqoop程序将hive数据仓库表导出到数据库中。   
#脚本参数:
#编写人:                                                                 
#编写日期:2024-01-22                                                        
#注:      1、需要先在数据库中有对应的表结构,字段长度合理。
#          2、数据库表名大小写
################################################################################

if [ $# -ne 8 ];then
        echo "请输入参数:HIVE库名 HIVE表名 WHERE条件 EXP-HIVE库名 DATADB连接串 DATADB用户名 DATADB口令 DATADB表名"
        echo "例如:sh sqoop_export_data.sh database table_name \"1=1\" exp oracle:thin:@192.168.xx.xx:1521/database user password table_name"
        exit 1
fi
#export PATH=$PATH:/usr/hdp/3.0.1.0-187/hive/lib/*


#变量赋值
hive_db=$1
hive_table=$2
condition=$3
exp_hive_db=$4
datadb_str=$5
datadb_user=$6
datadb_passwd=$7
datadb_table=$8

start_time=`date +%s`

echo "[INFO][`date +"%Y-%m-%d %H:%M:%S"`]Create export table ${exp_hive_db}.exp_${hive_table}"

#beeline -e "set role admin;"
#增加外部表删除语句 alter ... external=false

beeline -e "ALTER TABLE ${exp_hive_db}.exp_${hive_table} SET TBLPROPERTIES('EXTERNAL'='False'); drop table if exists ${exp_hive_db}.exp_${hive_table};"

#创建外部临时表
beeline -e "create external table ${exp_hive_db}.exp_${hive_table} like ${hive_db}.${hive_table};insert into ${exp_hive_db}.exp_${hive_table} select * from  ${hive_db}.${hive_table} where ${condition};"


if [ $? -ne 0 ]
then
echo "[ERROR][`date +"%Y-%m-%d %H:%M:%S"`]Failed create export table  ${exp_hive_db}.exp_${hive_table} ."
exit 1;
fi

echo "[INFO][`date +"%Y-%m-%d %H:%M:%S"`]Run sqoop export."

#sqoop导出
sqoop export \
-D mapreduce.map.java.opts="-Duser.timezone=GMT" \
--null-string '\\N' \
--null-non-string '\\N' \
--hcatalog-database ${exp_hive_db} \
--hcatalog-table exp_${hive_table} \
--connect jdbc:${datadb_str} \
--username ${datadb_user} \
--password ${datadb_passwd} \
--table ${datadb_table} 


if [ $? -ne 0 ]
then
echo "[ERROR][`date +"%Y-%m-%d %H:%M:%S"`]Failed sqoop export."
exit 1;
fi

end_time=`date +%s`
echo "[INFO][`date +"%Y-%m-%d %H:%M:%S"`]End export hive ${hive_db}.${hive_table} to datadb ${datadb_str} ${datadb_table}, execution time was `expr $end_time - $start_time` s"
exit 0;
2、导入导出到Oracle
2.1、Oracle抽取数据到Hive

load_data_oracle.sh

#!/bin/bash
################################################################################
#脚本功能:从oracle的数据库下抽取表数据到大数据平台hive的HLOAD库上 
#脚本参数:  
#编写日期:2024-01-22                                                          
#功能实现:                                                                    
#        1.通过sqoop程序将应用ORACLE库中字段按条件全部导入到HIVE的HLOAD库中
#修    改:
################################################################################

if [ $# -ne 2 ];then
        echo "请输入参数:源系统编码 DATADB表名 取数条件 "
        echo "例如:sh load_data_oracle.sh table_name \"data_dt='20190701000001'\" "
        echo "例如:sh load_data_oracle.sh table_name \"1=1\" "
        exit 1
fi

#初始化用户变量,根据个人需要
#source $TEST_HOME/shell/config/bash_profile


datadb_table=$1
datadb_where=$2

start_time=`date +%s`

#删除HLOAD中此表同批次表
#beeline -e "set role admin;"
beeline -e "drop table if exists ${HLOAD}.${datadb_table};"

echo "[INFO][`date +"%Y-%m-%d %H:%M:%S"`]Run Sqoop load."
sh $HLWJG_HOME/shell/tools/sqoop_load_data.sh ${SRC_ORACLE} ${SRC_ORACLE_USER} ${SRC_ORACLE_PWD} ${datadb_table} "${datadb_where}" ${HLOAD} ${datadb_table}

if [ $? -ne 0 ]
then
echo "[ERROR][`date +"%Y-%m-%d %H:%M:%S"`]Failed sqoop load stage table."
exit 1;
fi

#结束
end_time=`date +%s`
echo "[INFO][`date +"%Y-%m-%d %H:%M:%S"`]End load  ${SRC_ORACLE} ${datadb_table} condition:${datadb_where} to ${HLOAD}.${datadb_table} , execution time was `expr $end_time - $start_time` s"

exit 0;
2.2、Hive导出数据到Oracle

export_data_oracle.sh

#!/bin/bash
################################################################################
##脚本功能:从大数据平台导出数据到oracle
#脚本参数:  
#编写日期:2024-01-22                                                           
#功能实现:                                                                    
#        1.通过sqoop程序将HIVE的APP库中数据按条件全部导出oracle库 
################################################################################

if [ $# -ne 4 ];then
        echo "请输入参数:HIVE库名 HIVE表名 WHERE条件 DATADB表名 "
        echo "例如:sh export_data_oracle.sh database table_name \"data_dt='20190709040000'\" table_name"
        exit 1
fi
source $HLWJG_HOME/shell/config/bash_profile

hive_db=$1
hive_table=$2
condition=$3
datadb_table=$4

start_time=`date +%s`

#按条件清除原表数据
echo "开始按条件${condition}清除oracle表${datadb_table}的数据"
#修改0920 删除oracle表对应条件的数据
sqlplus -s ${DST_ORACLE_USER}/${DST_ORACLE_PWD}@${DST_ORACLE_IP}:${DST_ORACLE_PORT}/${DST_ORACLE_DB} <<eof
DELETE FROM ${datadb_table} WHERE ${condition};
eof

#if [ $? -ne 0 ]
#then
#echo "[ERROR][`date +"%Y-%m-%d %H:%M:%S"`]清除oracle数据出现异常,请核对是否有表、条件字段."
#exit 1;
#fi

echo "完成清除数据库表${datadb_table} ${condition} 条件数据"


#导出数据到DATADB
echo "[INFO][`date +"%Y-%m-%d %H:%M:%S"`]Run sqoop export."
sh $HLWJG_HOME/shell/tools/sqoop_export_data.sh ${hive_db} ${hive_table} "${condition}" ${EXP} ${DST_ORACLE} ${DST_ORACLE_USER} ${DST_ORACLE_PWD} ${datadb_table}

if [ $? -ne 0 ]
then
echo "[ERROR][`date +"%Y-%m-%d %H:%M:%S"`]Failed sqoop export."
exit 1;
fi

end_time=`date +%s`
echo "[INFO][`date +"%Y-%m-%d %H:%M:%S"`]End export ${hive_db}.${hive_table} to datadb ${DST_ORACLE} ${datadb_table}, execution time was `expr $end_time - $start_time` s"
exit 0;

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿来孺词

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值