gpt4 book ai didi

shell - 如何通过 shell 脚本调用 oozie 工作流并阻止/等待工作流完成

转载 作者:行者123 更新时间:2023-12-03 18:28:58 26 4
gpt4 key购买 nike

我使用 Oozie 创建了一个工作流,该工作流由多个操作节点组成,并且能够通过协调器成功运行这些节点。

我想通过包装器 shell 脚本调用 Oozie 工作流。

包装器脚本应调用 Oozie 命令,等待 oozie 作业完成(成功或错误)并返回 Oozie 成功状态代码 (0) 或失败的 oozie 操作节点的错误代码(如果 oozie 工作流的任何节点具有失败的)。

从我目前所见,我知道只要我调用 oozie 命令来运行工作流,该命令就会退出,并在 linux 控制台上打印作业 ID,而 oozie 作业将在后端异步运行。

我希望我的包装器脚本阻塞,直到 oozie 协调器作业完成并返回成功/错误代码。

您能否告诉我如何/是否可以使用任何 oozie 功能来实现这一目标?

我在 Linux 中使用 Oozie 3.3.2 版和 bash shell。

注意:如果有人对我为什么需要这样的功能感到好奇 - 要求是我的包装器 shell 脚本应该知道 oozie 作业运行了多长时间,oozie 作业何时完成,并相应地返回退出代码,以便调用包装器脚本的父进程知道作业是否成功完成,如果出错,则为支持团队发出警报/票。

最佳答案

您可以通过使用作业 ID 然后启动循环并解析 oozie 信息的输出来做到这一点。下面是相同的shell代码。

开始 oozie 工作

oozie_job_id=$(oozie job -oozie http://<oozie-server>/oozie -config job.properties -run );
echo $oozie_job_id;
sleep 30;

从输出中解析作业 ID。这里的job_id格式是“job:jobid”
job_id=$(echo $oozie_job_id | sed -n 's/job: \(.*\)/\1/p');
echo $job_id;

定期检查作业状态,如果它正在运行
while [ true ]
do
job_status=$(oozie job --oozie http://<oozie-server>/oozie -info $job_id | sed -n 's/Status\(.*\): \(.*\)/\2/p');
if [ "$job_status" != "RUNNING" ];
then
echo "Job is completed with status $job_status";
break;
fi
#this sleep depends on you job, please change the value accordingly
echo "sleeping for 5 minutes";
sleep 5m
done

这是执行此操作的基本方法,您可以根据用例进行修改。

关于shell - 如何通过 shell 脚本调用 oozie 工作流并阻止/等待工作流完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30953192/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com