解决hive数据空跑问题----标题-增加删除分区和添加分区逻辑
在日常调度中会经常遇到hive的调度会空跑的问题,当调度完成之后,有时候会发现没有跑进去数据,但是日志等都是正常的,后面在查找了好多资料之后,发现是有些大数据平台Hadoop在自动调度的时候会出现空跑问题,解决方法很多,但不一定能够百分百解决,下面介绍一下我对空跑原因的分析与解决方案。
原因分析:
可能是该大数据平台对删除分区与增加分区的自动化功能不太完善,导致调度时删除和增加分区时正常,时不正常。当删除分区不彻底,或者当删除分区之后,没有正常增加分区,就会导致数据空跑。
解决方案:
- 在shell中增加删除和添加分区的逻辑
- 在sql中增加删除和添加分区的逻辑
而我今天采用的是在shell中增加 删除和添加分区的逻辑
代码如下:
#! /bin/bash -x
source ~/.bash_profile
declare -r CURR_DIR=$(cd `dirname $0`;pwd)
JOB_NAME=`basename $0 .sh`
start_date=${1:-`date -d '-30 day' '+%Y-%m-%d'`} # T+7
end_date=${2:-`date -d '-1 day' '+%Y-%m-%d'`} # T+1
DB_NAME=${3:-"DB_Name"}
QUEUE_NAME=${4:-"QUEUE_NAME"}
echo "bash ${CURR_DIR}/${JOB_NAME}.sh ${start_date} ${end_date} ${DB_NAME} ${QUEUE_NAME}"
#删除分区
hive -e "use DB_Name;alter table Table_Name1 drop if exists partition (ts>='${start_date}',ts<='${end_date}')"
hive -e "use DB_Name;alter table Table_Name2 drop if exists partition (ts>='${start_date}',ts<='${end_date}')"
hive -e "use DB_Name;alter table Table_Name3 drop if exists partition (ts>='${start_date}',ts<='${end_date}')"
#添加分区
while [ 0 -eq 0 ]
do
t1=`date -d "$start_date" +%s`
t2=`date -d "$end_date" +%s`
if [ $t2 -gt $t1 ]; then
start_date=`date -d "${start_date} +1 day" '+%Y-%m-%d'`
hive -e "use DB_Name;ALTER TABLE Table_Name1 ADD IF NOT EXISTS PARTITION (ts='${start_date}')"
hive -e "use DB_Name;ALTER TABLE Table_Name2 ADD IF NOT EXISTS PARTITION (ts='${start_date}')"
hive -e "use DB_Name;ALTER TABLE Table_Name3 ADD IF NOT EXISTS PARTITION (ts='${start_date}')"
else
break;
fi
start_date=${1:-`date -d '-30 day' '+%Y-%m-%d'`} # 变量重新赋值为初始值
done
只要在shell中添加如上的逻辑,就会解决hive数据空跑的问题。
该方案能够完美解决数据空跑问题,缺点是耗时,会增加一定的时长
版权声明:本文为weixin_46327368原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。