我有一个mapReduce任务(https://github.com/flopezluis/testing-hadoop),它读取文件夹中的文件并将它们附加到zip文件中。我需要永远运行这个任务,所以当它完成处理它们时,它应该再次运行。我正在读oozie,但我不确定它是否最合适,因为它可能对我的问题来说太大了。
如果oozie是最好的解决方案。如果我写一个协调器每10分钟运行一次,如果任务需要超过10分钟,协调器会再次等待运行任务会怎样?
任务说明
文件夹始终相同。拉链文件有差异,一个用于密钥。我们的想法是逐步创建zip文件。我认为这比在完成所有文件后创建zip文件更快。 这些文件包含以下内容:
<info operationId="key1">
DATA1
</info>
<info operationId="key1">
DATA2
</info>
<info operationId="key2">
DATA3
</info>
所以拉链会是这样的:
key1.zip - &gt; data1,data2
key3.zip - &gt; DATA3
由于
答案 0 :(得分:3)
你可以使用oozie。 Oozie有一个设置,它将告诉限制一次可以运行多少个作业实例。如果你的第一份工作在那之后没有完成,那么它将等待运行下一份工作。
来自Oozie文档:
6.1.6。协调员行动执行政策 可以在协调器应用程序中定义协调器作业的操作的执行策略。 •超时:协调器作业可以指定其协调器操作的超时,即协调器操作在放弃执行之前处于WAITING或READY状态的时间。 •并发:协调器作业可以指定其协调器操作的并发性,即,在协调器引擎启动限制之前,允许并发运行的协调器操作数(RUNNING状态)。 •执行策略:协调器作业可以在协调器引擎中存在协调器操作积压时指定其协调器操作的执行策略。不同的执行策略是“最早的第一”,“最新的第一”和“仅限最后一个”。由于延迟输入数据,并发控制或者手动重新运行协调器作业,通常会发生积压。
您还想评论一下,您可以通过DataSet触发数据到达时的协调作业,但我并不熟悉DataSet。
答案 1 :(得分:1)
如果你只需要在不同的输入文件上重复执行相同的hadoop作业,那么Oozie可能是一种矫枉过正的行为。在测试平台上安装和配置Oozie也需要一些时间。编写一个重复提交hadoop作业的脚本可能就足够了。
但无论如何,Oozie可以做到这一点。如果将并发性设置为1,则运行状态下最多只有1个oozie协调器操作(应该是一个只包含一个hadoop作业的工作流)。但是您可以增加并发阈值以允许同时执行更多操作。