如何将参数传递给Apache Apex中的application.java类?

时间:2016-06-15 15:55:51

标签: java apache-apex

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

找不到任何引用。有人可以分享这方面的知识吗?

非常感谢。

2 个答案:

答案 0 :(得分:2)

您可以将参数作为配置传递。此配置将作为参数传递给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上的
  3. -conf选项:apex cli上的启动命令提供了-conf选项来指定属性。您需要指定配置xml的路径。您应该将此文件用于特定于特定应用程序或特定于此应用程序启动的属性。

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

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

    <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()的String标识符。

答案 1 :(得分:0)

由于接受的答案仅详细描述了如何指定运算符属性或使用~/.dt/dt-site.xml或Apex CLI,以下是一个简单的示例,说明如何指定可在Application.java(即在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()方法之前需要运算符中的属性(例如在运算符的构造函数中),则此方法可以非常有用,而不是使用运算符属性。