【问题标题】:How to pass arguments to application.java class in Apache Apex?如何将参数传递给 Apache Apex 中的 application.java 类?
【发布时间】:2016-06-15 15:55:51
【问题描述】:

如何将参数传递给Application.java 类?就像我们如何在 java 的 main 方法中传递 (String[] args) 一样?

找不到任何参考资料。有人可以分享这方面的知识吗?

非常感谢。

【问题讨论】:

    标签: java apache-apex


    【解决方案1】:

    您可以将参数作为配置传递。此配置将作为参数传递给 Application.java 中的 populateDAG() 方法。

    配置为org.apache.hadoop.conf.Configuration。您可以将其指定为 xml。 xml语法请参考https://hadoop.apache.org/docs/r2.6.1/api/org/apache/hadoop/conf/Configuration.html

    有不同的方式可以指定属性:

    1. ~/.dt/dt-site.xml:默认情况下,apex cli 将查找此文件(~ 是您的主目录)。您应该将此文件用于环境中所有应用程序共有的属性。

    2. apex cli 上的-conf 选项:apex cli 上的启动命令提供 -conf 选项来指定属性。您需要指定配置 xml 的路径。您应该将此文件用于特定于特定应用程序或特定于该应用程序启动的属性。

    3. -Dproperty-name=value:apex cli 上的启动命令提供 -D 选项来指定属性。您可以指定多个属性,例如 -Dproperty-name1=value1 -Dproperty-name2=value2 等。

    指定运算符属性的语法如下:

    <property>
          <name>dt.application.applicationName.operator.OperatorIdentifier.prop.property-name1</name>
          <value>value1</value>
    </property>  
    
    <property>
          <name>dt.application.applicationName.operator.OperatorIdentifier.prop.property-name2</name>
          <value>value2</value>
    </property>  
    

    OperatorIdentifier/name 是您在 populateDAG() 中用于 dag.addOperator() 的字符串标识符。

    【讨论】:

    • 感谢@Yogi Devendra
    【解决方案2】:

    由于接受的答案仅详细描述了如何指定 operator 属性或使用 ~/.dt/dt-site.xml 或 Apex CLI,这里是一个简单的示例,如何指定可以在 @987654322 中使用的属性@(即在populateDag() 方法中)。

    在文件中指定 XML 中的属性:resources/META-INF/properties.xml 像这样:

    <configuration>
      <!-- Specify some arbitrary app configs -->
      <property>
        <name>prop1</name>
        <value>val1</value>
      </property>
      <property>
        <name>prop2</name>
        <value>val2</value>
      </property>
    
      <!-- Specify some other configs, i.e. operator properties -->
      <property>
        <name>dt.application.applicationName.operator.OperatorIdentifier.prop.property-name1</name>
        <value>value1</value>
      </property>
    
    </configuration>
    

    然后在您的Application.java 中,您可以获得如下属性:

    public class Application implements StreamingApplication
    {
    
      @Override
      public void populateDAG(DAG dag, Configuration conf)
      {
        String prop1 = conf.get("prop1");
        String prop2 = conf.get("prop2", "defaultValue"); // when the property is not set in XML, a default can be used
    
        // populate your DAG here ...
      }
    }
    

    如果您在执行 setup() 方法之前需要运算符中的属性(例如在运算符的构造函数中),则此方法非常有用,而不是使用运算符属性。

    【讨论】:

      猜你喜欢
      • 2016-02-29
      • 2021-09-11
      • 2013-07-27
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多