是否可以配置Oozie协调器,该协调器可以触发工作流以在这些条件下处理每组文件:
我将组定义为父目录下的文件集合。 每隔xx分钟,一组文件被加载到其相应的HDFS目录中。 每组文件代表特定数据库中的表。 每组文件都包含在自己的父HDFS文件夹中,例如Database1,Database2。
文件名在每个父/组文件夹名称中都是不同的名称。 我想要oozie做什么(如果可能的话): 扫描该特定父目录中的所有文件是否存在,每个文件名将不同,并且通常以这些分隔文件所代表的表命名。
如果存在所有文件(来自Oozie中定义的模板),则我执行工作流程。
oozie是多么可配置,我的猜测是处理这个特定请求可能不那么灵活,但我很想知道你们的想法。
在将文件夹/文件结构更改为HDFS方面,我的双手并列。 我需要知道正确的问题,要求负责生成传入文件的人。
任何见解/经验将不胜感激!
答案 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或更新我。