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