Oozie Coordinator配置多个文件依赖

时间:2016-07-12 07:00:45

标签: hadoop oozie

是否可以配置Oozie协调器,该协调器可以触发工作流以在这些条件下处理每组文件:

我将组定义为父目录下的文件集合。 每隔xx分钟,一组文件被加载到其相应的HDFS目录中。 每组文件代表特定数据库中的表。 每组文件都包含在自己的父HDFS文件夹中,例如Database1,Database2。

文件名在每个父/组文件夹名称中都是不同的名称。 我想要oozie做什么(如果可能的话): 扫描该特定父目录中的所有文件是否存在,每个文件名将不同,并且通常以这些分隔文件所代表的表命名。

如果存在所有文件(来自Oozie中定义的模板),则我执行工作流程。

oozie是多么可配置,我的猜测是处理这个特定请求可能不那么灵活,但我很想知道你们的想法。

在将文件夹/文件结构更改为HDFS方面,我的双手并列。 我需要知道正确的问题,要求负责生成传入文件的人。

任何见解/经验将不胜感激!

1 个答案:

答案 0 :(得分:0)

从您的查询中,您似乎没有以某个日期模式结束的目录路径,该日期模式可能已用于触发协调器。

您可以结合使用切换功能和shell / java操作来实现此目的 -

1>让你的协调员频率启动工作流程非常低 - 比如5分钟。

2 - ;正如您所提到的,您有表模板,我假设您已经知道了特定目录中的表名。编写简单的shell或java动作以递归方式检查这些目录,如果所有表都存在则返回true。

3>如果所有表都存在或退出,则使用工作流的切换功能继续: -

<decision name = "table_exists">
    <switch>
        <case to = "proceed_further">${wf:actionData('check_directory')['exists'] eq 'true'}
        </case>
     <default to = "end" />
  </switch>
</decision>

请注意,上面的check_directory是一个动作,可以用任何语言以适当的方式写入返回值。如果您需要帮助来编写此操作,请检查ooziedoc或更新我。