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

时间:2018-05-22 15:46:34

标签: hadoop hive automic

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

1 个答案:

答案 0 :(得分:0)

这可以实现在公共位置设置一些标志。并且每个作业都应该访问该位置,如果设置了该标志,则等待该标志被取消。

根据上述声明,我在执行任何一个工作流程之前,在特定位置的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