如何在 Apache Apex 中将参数传递给 application.java class?

How to pass arguments to application.java class in Apache Apex?

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

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

非常感谢。

您可以将参数作为配置传递。此配置将作为参数传递给 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 等

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

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

由于接受的答案仅详细描述了如何指定 operator 属性或使用 ~/.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() 方法之前需要运算符中的属性,例如在运算符的构造函数中,则此方法非常有用,而不是使用运算符属性。