Oozie可以暂停工作流程直到生成/存在某个文件吗?

时间:2015-07-20 21:43:38

标签: java hadoop mapreduce hive oozie

我第一次使用Oozie并且发现它有点难以解析规范。我正在尝试创建一个简单的工作流程,在其中我在Hive中运行一些查询,然后执行shell操作以便使用不同的程序进行一些分析,然后最后我想通过Java执行Oozie职位。

虽然我了解如何单独执行所有这些操作,但是如何设置我的工作流以便最终Java作业在启动之前等待生成文件?谷歌搜索,我看到让Oozie工作流等待数据集在启动之前生成的方法,但我不希望整个工作流等待,因为我只希望工作流中的一个特定操作等待用于生成输入文件。

输入文件将是简单的 - 我很可能只有第二个动作,shell,在它退出之前执行一些命令,如touch $(date -u "+%Y-%m-%d-%H").done,这样我的输入文件就会是一个零字节文件,名称为2015-07-20-14.done

2 个答案:

答案 0 :(得分:2)

创建一个cordinator,它将在给定的持续时间内在指定的hdfs位置查找数据集。

样本协调员

<coordinator-app name="FILE_CHECK" frequency="1440" start="2009-02-01T00:00Z" end="2009-02-07T00:00Z" timezone="UTC" xmlns="uri:oozie:coordinator:0.1">
   <datasets>
      <dataset name="datafile" frequency="60" initial-instance="2009-01-01T00:00Z" timezone="UTC">
         <uri-template>hdfs://<URI>:<PORT>/data/feed/${YEAR}/${MONTH}/${DAY}/${HOUR}</uri-template>
      </dataset>
   </datasets>
   <input-events>
      <data-in name="coorddatafile" dataset="datafile">
          <start-instance>${coord:current(-23)}</start-instance>
          <end-instance>${coord:current(0)}</end-instance>
      </data-in>
   </input-events>
   <action>
      <workflow>
         <app-path>hdfs://<URI>:<PORT>/workflows</app-path>
      </workflow>
   </action>     
</coordinator-app>

答案 1 :(得分:0)

您可以在此处使用decision node概念。

检查文件,一个switch case以确定一旦你让文件执行你的下一个java动作。

---- EDIT ------

在下面找一个例子,这并不能解决你的问题:

Min()

同样明智的是,你可以在开关盒中添加你的动作节点并继续相应的。