如何通过automic以互斥方式选择文件?

q7solyqu  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(313)

我们正在短时间内从大型机接收两个不同的文件。我们无法预测文件的到达顺序。这些文件应该由两个不同的工作流选择。但它应该以相互排斥的方式触发。换句话说,如果一个工作流正在运行,那么其他工作流必须等待上一个工作流。

vhmi4jdf

vhmi4jdf1#

这可以通过在公共位置设置一些标志来实现。每个作业都应该访问该位置,如果设置了该标志,则等待该标志被取消设置。
基于上述声明,我已经在unix服务器上的特定位置创建了一个文件,然后再执行任何一个工作流。任何工作流都会在特定位置看到该文件如果该文件存在,则会等待该文件被先前启动的上一个作业删除。
创建文件并等待删除下面的文件是unix脚本。可以在“预处理”选项卡中的工作流的第一个作业中定义。


# !/bin/bash

while true
do
        files=$(ls /u/users/lock 2> /dev/null | wc -l)
        if [ "$files" != "0" ]
        then
              echo "Other <workFlow name> is running wait for 10 second"
                sleep 10
        else
              echo "<workFlow name > is not running so <current workflow name> is starting"
              touch /u/users/lock
              exit 0
        fi
done

要在下面的工作流结束时删除文件,请使用unix脚本。必须在“流程”选项卡中的最后一个作业中定义此脚本。


# !/bin/bash

echo "<current workFlow name> is finshed so releasing the lock"
files=$(ls /u/users/lock 2> /dev/null | wc -l)
if [ "$files" != "0" ]
then
  rm /u/users/lock
fi

相关问题