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

Posted

技术标签:

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

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

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

非常感谢。

【问题讨论】:

【参考方案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

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

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

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

    -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() 方法之前需要运算符中的属性(例如在运算符的构造函数中),则此方法非常有用,而不是使用运算符属性。

【讨论】:

以上是关于如何将参数传递给 Apache Apex 中的 application.java 类?的主要内容,如果未能解决你的问题,请参考以下文章

Apache Tomcat 1.7 如何将附加参数传递给 JAAS

如何将参数传递给 ssis 中的 ado.net 源?

如何将参数传递给 JSP 组件?

如何将 url 中的参数传递给背包创建表单

如何将 URL 中的数组作为参数传递给 Promise.all

将参数传递给C#中的存储过程