Azkaban exec_id自增长和executor启动不激活问题

时间:2021-10-07 17:16:14

1.Azkaban在重启executor服务时exec_id自增。

在使用Azkaban时我们会面临将某些任务放到指定的executor上去运行的情况,我们通常使用 

Azkaban exec_id自增长和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="***********"