kettle抽取数据分发到其他数据库

最近要把数据库里一些表的数据分发到十几个不同的DB2数据库中,为减少工作量,设置相关数据库信息为参数(密码 ${DB2_PSWD})。
kettle抽取数据分发到其他数据库_第1张图片

kettle抽取数据分发到其他数据库_第2张图片
设计好TRAN和JOB后,用shell调度脚本按需执行相关转换或任务。
kettle调度脚本kettle_WuLiu.sh 如下:

#!/bin/bash

#脚本所在路径
source /etc/profile
WORK_DIR=/home/hadoop/ktl_wks
LOG_DATE=`date +%Y%m%d`
LOG_TIME=`date +%H%M%S`

LOGFILE=${WORK_DIR}/kettle_log/${LOG_DATE}${LOG_TIME}_XX.log
echo `date +'%Y-%m-%d %H:%M:%S'`" kettle_WuLiu START:" >> ${LOGFILE} 2>&1

# KETTLE命令
STARTTRUNS=/home/hadoop/software/kettle/data-integration/pan.sh
STARTJOB=/home/hadoop/software/kettle/data-integration/kitchen.sh
 
#向数据库1发送数据
echo `date +'%Y-%m-%d %H:%M:%S'`" JOB_XX1 START:" >> ${LOGFILE} 2>&1
${STARTJOB}  -rep=kettle -user=admin -pass=admin -dir=/Wuliu/JOB -level=Basic -job=JOB_WuLiu -param:DB2_IP=10.XX.XX.X1 -param:DB2_DBNAME=WL -param:DB2_PORT=50000 -param:DB2_USER=user_name -param:DB2_PSWD=passsword -param:ORGCODE=XX010000 >> ${LOGFILE} 2>&1
echo `date +'%Y-%m-%d %H:%M:%S'`" JOB_XX1 END." >> ${LOGFILE} 2>&1

#清缓存
rm -rf /home/hadoop/software/software/kettle/data-integration/./system/karaf/caches

#向数据库2发送数据
echo `date +'%Y-%m-%d %H:%M:%S'`" JOB_XX2 START:" >> ${LOGFILE} 2>&1
${STARTJOB}  -rep=kettle -user=admin -pass=admin -dir=/Wuliu/JOB -level=Basic -job=JOB_WuLiu -param:DB2_IP=10.XX.XX.X2 -param:DB2_DBNAME=WL -param:DB2_PORT=50000 -param:DB2_USER=user_name -param:DB2_PSWD=passsword -param:ORGCODE=XX020000 >> ${LOGFILE} 2>&1
echo `date +'%Y-%m-%d %H:%M:%S'`" JOB_XX2 END." >> ${LOGFILE} 2>&1


#...向数据库n发送数据
 
#检查执行是否正常
${WORK_DIR}/LOG_CHECK.sh kettle_WuLiu ${LOGFILE}
      
echo `date +'%Y-%m-%d %H:%M:%S'`" kettle_WuLiu END." >> ${LOGFILE} 2>&1

日志检查脚本LOG_CHECK.sh如下:

#!/bin/bash

#############################################################################
#
#名称: LOG_CHECK.sh
#描述: 日志检查
#用法: 传入参数:$1 脚本名称 $2 日志文件名称
#
#############################################################################

#脚本所在路径
WORK_DIR=/home/hadoop/ktl_wks
LOG_DATE=`date +%Y%m%d`
LOG_TIME=`date +%H%M%S`

TARGET_TYPE=$1
LOGFILE=$2
SH_NAME=${TARGET_TYPE}_2nd.sh

echo `date +'%Y-%m-%d %H:%M:%S'`" LOG CHECK START." >> ${LOGFILE} 2>&1

ERR_LOG=`cat ${LOGFILE} | grep 'error' | awk -F ' ' '{print $1}'`

if [ -z ${ERR_LOG} ];then
  echo `date +'%Y-%m-%d %H:%M:%S'`" 日志检查结束,检查结果为:未发现异常." >> ${LOGFILE} 2>&1 
else
  echo `date +'%Y-%m-%d %H:%M:%S'`" 日志检查结束,检查结果为:发现异常,将重新处理." >> ${LOGFILE} 2>&1 
  sleep 10m
  ${WORK_DIR}/${SH_NAME}
  
fi

添加定时任务crontab -e 每天8点执行脚本: 0 8 * * * /home/hadoop/ktl_wks/kettle_WuLiu.sh >> /home/hadoop/ktl_wks/kettle_WuLiu_run.log 2>&1
除了正常的kettle调度脚本,另外复制一个kettle_WuLiu_2nd.sh,注意修改LOGFILE=${WORK_DIR}/kettle_log/${LOG_DATE}${LOG_TIME}_XX_2nd.log 第二次执行调度脚本就不执行日志检查了去掉${WORK_DIR}/LOG_CHECK.sh kettle_WuLiu ${LOGFILE} #检查执行是否正常
可以根据日志名称是否有2nd大体浏览每天的kettle调度情况,如果发现第二次执行kettle调度仍有失败 确认具体原因(数据库异常、kettle资源库异常…)处理后重新手动执行脚本。

你可能感兴趣的:(kettle)