2017-02-21 19 views
0

背景執行蜂房的查詢串(構建DAG)

我期待執行一堆蜂巢查詢(約20-30查詢,且數量不斷增加)。其中一些查詢取決於其他一些查詢的結果,而其中一些查詢可以並行執行。 (DAG)

問題

是否有這可能需要建立一個DAG(給定束查詢作爲輸入的)和平行/順序執行這些查詢(在最optimium方式)的護理工作流程管理器。

相同的最佳實踐是什麼?

回答

1

您可以使用任何工具進行工作流管理。最佳實踐取決於用例和專業知識。

傳統上在企業中: - 可以使用Control-M或cron調度程序。

從大數據生態系統:Oozie的或阿茲卡班

還有一些其他的工具,有其可用於工作流管理。

+0

謝謝阿希什..我想了Oozie與阿茲卡班允許用戶建立一個DAG,但需要DAG用戶干預建造。 (這是我對他們的理解。)是否有任何這樣的系統將一系列查詢作爲輸入,解釋查詢並自行構建DAG。 – Harshit

0

此外,這可以很容易地在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/

+0

謝謝。但我更感興趣的是外包DAG。在這裏,您特別觸發了第一個鏡頭中的myscript_1,myscript_2,myscript_3。發佈你觸發步驟4和5.是否有一個標準的工具,可以讓用戶免去構建DAG。 (即DAG是什麼樣的,DAG是如何構建的,我想從它完全抽象出來)。問題太多了,假設這是一個非常普遍的要求。 – Harshit

+0

使用包裝腳本從您的表示中生成DAG以獲取更多抽象。我目前正在做類似的任務。需要從包含查詢/腳本和級別+順序的數據庫生成DAG。我將生成DAG shell腳本,然後運行它們。 – leftjoin

+0

這個想法是,你已經有一些DAG的代表。您只需將此表示法轉換爲可運行腳本 – leftjoin