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