Как передать аргументы в класс application.java в Apache Apex?

Как я могу передать аргументы Application.java учебный класс? Например, как мы проходим (String[] args) в основной метод в Java?

Не удалось найти никаких ссылок. Может кто-нибудь поделиться пожалуйста знаниями по этому поводу?

Большое спасибо.

2 ответа

Решение

Вы можете передать аргументы в качестве конфигурации. Эта конфигурация будет передана в качестве аргумента методу populateDAG() в Application.java.

Конфигурация 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. -conf опция на apex cli: команда запуска на apex cli предоставляет -conf Возможность указать свойства. Вам необходимо указать путь для конфигурации xml. Вам следует использовать этот файл для свойств, относящихся к конкретному приложению или специфичных для данного запуска приложения.

  3. -Dproperty-name=value: команда запуска в apex cli предоставляет опцию -D для указания свойств. Вы можете указать несколько свойств, таких как -Dproperty-name1= значение1 -Dproperty-name2= значение2 и т. Д.

Синтаксис для указания свойств оператора выглядит следующим образом:

<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 - это строковый идентификатор, который вы используете для dag.addOperator() в populateDAG().

Поскольку принятый ответ подробно описывает только то, как указать свойства оператора или с помощью ~/.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() метод выполняется, например, в конструкторе оператора.

Другие вопросы по тегам