Azkaban exec_id自增长和executor启动不激活问题
1.Azkaban在重启executor服务时exec_id自增。
在使用Azkaban时我们会面临将某些任务放到指定的executor上去运行的情况,我们通常使用

通过executor的id来指定executor服务器去执行任务。
但是当集群由于某些原因挂掉,exec_id默认是自增长的,这就产生一个很麻烦的问题:我们需要将所有任务重新进行配置。
解决此问题的方式:
1.改变源码(不建议,需要耗费大量时间去阅读源码的逻辑)
2.更改executor的启动脚本来给executor指定id
本次我们使用的是改变shell脚本的方法:
思路:exec_start.sh
在启动executor后,executor会向元数据库executors表中注册
我们在shell脚本中 首先判断executor是否启动,如果启动就执行更改数据库的操作。
#!/bin/bash
# Start service for azkaban
# Base Env
SCRIPTS_DIR=$(dirname $0)
# User Env For MySQL
HOSTNAME=`hostname -f`
PORT="3306"
USERNAME="azkaban"
PASSWORD="***********"
DBNAME="azkaban"
HOST="***********"
# Azkaban Status
ACTIVE=1
ID=1
# pass along command line arguments to the internal launch script.
${SCRIPTS_DIR}/internal/internal-start-executor.sh "$@" >executorServerLog__`date +%F+%T`.out 2>&1 &
# MySQL Exc
MYSQL="mysql -u${USERNAME} -p${PASSWORD} -h${HOST} ${DBNAME}"
select_sql="select count(1) from executors where host='${HOSTNAME}'"
update_sql="update executors set id=${ID},active=${ACTIVE} where host='${HOSTNAME}';"
while true
do
res=`$MYSQL -e "$select_sql" 2>/dev/null | sed '1d'`
if [ $res -eq 1 ];then
break
fi
sleep 3
echo -e "...."
done
# Update
$MYSQL -e "$update_sql" 2>/dev/null
[ $? -eq 0 ] && echo "start ......" || {
echo "stop ......"
}
将原有的启动脚本换成上面的脚本。
注意需要改动的地方:
# User Env For MySQL HOSTNAME=`hostname -f` PORT="3306" USERNAME="azkaban" PASSWORD="***********" DBNAME="azkaban" HOST="***********"
浙公网安备 33010602011771号