[EDP] 改进 Java 类型兼容性

https://blueprints.launchpad.net/sahara/+spec/edp-improve-compatibility

目前,EDP MapReduce (Java 类型) 示例必须添加修改才能在 Oozie 工作流中的 Java action 中使用。

此 bp 的目标是允许用户无需修改应用程序即可从其他 Hadoop 集群迁移到 Sahara。

问题描述

用户需要按照以下方式修改他们的 MapReduce 程序

  • 添加 conf.addResource 以读取 Oozie 工作流中指定的 <configuration> 标签中的配置值

    // This will add properties from the <configuration> tag specified
    // in the Oozie workflow.  For java actions, Oozie writes the
    // configuration values to a file pointed to by ooze.action.conf.xml
    conf.addResource(new Path("file:///",
                              System.getProperty("oozie.action.conf.xml")));
    
  • 消除 System.exit,以符合 Oozie Java action 的以下限制。例如,随 Apache Hadoop 捆绑的 hadoop-examples.jar 已经使用了 System.exit

首先,用户将尝试使用示例和/或在其他 Hadoop 集群(例如 Amazon EMR)上执行的一些应用程序来启动作业。我们应该支持上述用户。

提议的变更

我们将提供一种新的作业类型,称为 Java EDP Action,它将覆盖由 main_class 指定的主类。覆盖类添加属性并调用原始 main 方法。该类还会捕获由 System.exit 引起的异常。

替代方案

根据 Oozie 文档,Oozie 4.0 或更高版本提供了覆盖 action 的 Main 类的方法 (3.2.7.1)。 提议的实现比使用 Oozie 功能更简单。(我们将实现此功能,而无需任何 Oozie 库的依赖。)

数据模型影响

REST API 影响

其他最终用户影响

用户将不再需要修改他们的应用程序来使用 EDP。

部署者影响

开发者影响

Sahara-image-elements impact

Sahara-dashboard / Horizon 影响

sahara-dashboard / horizon 需要添加这种新的作业类型。

实现

负责人

主要负责人:大川和树 (k.oikw)

其他贡献者:山田裕二 (yamada-yuji)

工作项

  • 添加新的作业类型 (Java.EDP)

    • Java.EDP 将是 Java 的子类型

    • 实现将覆盖类的 jar 文件上传到 HDFS

    • 实现创建 workflow.xml

  • 实现覆盖类

依赖项

测试

我们将添加一个集成测试。此测试检查随 Apache Hadoop 捆绑的 WordCount 示例是否成功执行。

文档影响

如果 EDP 示例使用此功能,则需要更新文档。

参考资料