我有三个工作(称为p1,p2和p3),它们从HDFS中的3个不同目录中获取输入,并分别将输出写入3个diffect directoes。
3个输入目录的数据可用性每天都在变化。我的意思是那些3个输入目录是异步填充的,比如在凌晨1点到凌晨3点之间的任何时间。但是一旦上传文件,就会在每个目录中创建一个_DONEFLAG。
要求是在数据的相应目录中提供数据后立即开始工作。
我有另一份工作(称之为c1),它从p1,p2和p3的输出中获取输入数据,因此c1只能在所有3个父工作完成后才能启动。
有没有办法用oozie(协调员,工作流程和捆绑包)解决上述情况?这些是日常工作,输入目录有日期pattrens。根据我的理解,我不能在单个工作流程中并行分叉P1,p2和p3,因为所有3个都取决于它们各自的数据可用性。如果我为每个父作业(p1,p2,p3)编写3个单独的工作流程和协调器,那么只有在完成所有3个输入作业后,如何才能启动c1作业?我正在使用oozie v4。请建议。
答案 0 :(得分:0)
你可以容纳作业p1,p2和p3在各自的输出目录或任何其他目录中完成之后添加像_DONEFLAG这样的附加文件,以防没有任何输出目录。
然后为你的工作c1创建另一个协调器,它将监听每个作业p1,p2和p3的标志可用性,然后启动。
这是一种方式,并且可以从松散耦合的工作中受益。
您可能还想查看" 数据流水线"如oozie协调员文档中所述。虽然它非常接近我上面的建议:https://oozie.apache.org/docs/4.0.1/CoordinatorFunctionalSpec.html
可能有其他方式,但这些是我能想到的两种方式。