我期待執行一堆蜂巢查詢(約20-30查詢,且數量不斷增加)。其中一些查詢取決於其他一些查詢的結果,而其中一些查詢可以並行執行。 (DAG)
問題
是否有這可能需要建立一個DAG(給定束查詢作爲輸入的)和平行/順序執行這些查詢(在最optimium方式)的護理工作流程管理器。
相同的最佳實踐是什麼?
我期待執行一堆蜂巢查詢(約20-30查詢,且數量不斷增加)。其中一些查詢取決於其他一些查詢的結果,而其中一些查詢可以並行執行。 (DAG)
問題
是否有這可能需要建立一個DAG(給定束查詢作爲輸入的)和平行/順序執行這些查詢(在最optimium方式)的護理工作流程管理器。
相同的最佳實踐是什麼?
您可以使用任何工具進行工作流管理。最佳實踐取決於用例和專業知識。
傳統上在企業中: - 可以使用Control-M或cron調度程序。
從大數據生態系統:Oozie的或阿茲卡班
還有一些其他的工具,有其可用於工作流管理。
此外,這可以很容易地在shell腳本中實現 您可以啓動並行進程,等待它們,然後啓動其他進程。 命令末尾的和號指示shell運行後臺進程。看到這個例子:
#!/bin/bash
LOG_DIR=/tmp/my_log_dir
#Set fail counter before parallel processes
FAIL=0
echo "Parallel loading 1, 2 and 3..."
hive -hiveconf "some_var"="$some_value" -f myscript_1.hql 2>&1 | tee $LOG_DIR/myscript_1.log &
hive -hiveconf "some_var"="$some_value" -f myscript_2.hql 2>&1 | tee $LOG_DIR/myscript_2.log &
hive -hiveconf "some_var"="$some_value" -f myscript_3.hql 2>&1 | tee $LOG_DIR/myscript_3.log &
#Wait for three processes to finish
for job in `jobs -p`
do
echo $job
wait $job || let "FAIL+=1"
done
#Exit if some process has failed
if [ "$FAIL" != "0" ];
then
echo "Failed processes=($FAIL) Giving up..."
exit 1
fi
#Set fail counter before parallel processes
FAIL=0
echo "Continue with next parallel steps 4,5..."
hive -hiveconf "some_var"="$some_value" -f myscript_4.hql 2>&1 | tee $LOG_DIR/myscript_4.log &
#and so on
還有一些其他的方式來運行後臺進程: https://www.codeword.xyz/2015/09/02/three-ways-to-script-processes-in-parallel/
謝謝。但我更感興趣的是外包DAG。在這裏,您特別觸發了第一個鏡頭中的myscript_1,myscript_2,myscript_3。發佈你觸發步驟4和5.是否有一個標準的工具,可以讓用戶免去構建DAG。 (即DAG是什麼樣的,DAG是如何構建的,我想從它完全抽象出來)。問題太多了,假設這是一個非常普遍的要求。 – Harshit
使用包裝腳本從您的表示中生成DAG以獲取更多抽象。我目前正在做類似的任務。需要從包含查詢/腳本和級別+順序的數據庫生成DAG。我將生成DAG shell腳本,然後運行它們。 – leftjoin
這個想法是,你已經有一些DAG的代表。您只需將此表示法轉換爲可運行腳本 – leftjoin
謝謝阿希什..我想了Oozie與阿茲卡班允許用戶建立一個DAG,但需要DAG用戶干預建造。 (這是我對他們的理解。)是否有任何這樣的系統將一系列查詢作爲輸入,解釋查詢並自行構建DAG。 – Harshit