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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM