背景
我希望执行一堆配置单元查询(大约20-30个查询,并且数量不断增加)。其中一些查询依赖于少数其他查询的结果,而其中一些查询可以并行执行。 (DAG)
问题
是否有工作流管理器可以负责构建DAG(给定一堆查询作为输入)并并行/顺序执行这些查询(以最优化的方式)。
同样的最佳做法是什么。
答案 0 :(得分:1)
您可以使用任何工具进行工作流程管理。最佳实践取决于用例和专业知识。
传统上在公司: - 可以使用Control-M或cron调度程序。
来自大数据生态系统:oozie或azkaban
还有其他几种工具可用于工作流程管理。
答案 1 :(得分:1)
这也可以在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/