我创建了一个包含Sqoop,Hive和Pig操作的简单Oozie工作流程。对于每个动作,Oozie都会启动一个MR启动器,然后启动动作(Sqoop/Hive/Pig)。因此,工作流中总共有 6 个 MR 作业用于 3 个操作。
为什么Oozie启动MR启动器来启动动作而不是直接启动动作?
我在Apache Flume论坛上发布了相同的内容,这是回应。
这也是为了防止Oozie服务器陷入困境或成为 稳定。 例如,如果你有一堆运行 Pig 作业的工作流, 然后你会让Oozie服务器运行Pig客户端的多个副本。 (这是一个相对"重"的程序)直接。 通过移动所有 用户代码和外部客户端,用于在启动器作业 Oozie 中映射任务 服务器仍然更轻量级,更不容易出错。 它也可以 这种方式更具可扩展性,因为启动器作业分发 对集群中其他计算机的作业启动/监控;否则,与 Oozie服务器做所有事情,我们必须限制数量 基于 Oozie 服务器机器规格(RAM、CPU、 等)。 最后,从架构的角度来看,Oozie服务器 本身是无国籍的;也就是说,所有内容都存储在数据库中,并且 Oozie服务器可以随时关闭而不会丢失任何东西。 如果我们 如果直接从Oozie服务器启动作业,那么我们现在有一些 状态(例如,Pig 客户端无法重新启动和恢复)。