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