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="***********"