6. Flink передает параметры командной строки операторам «Углубленное понимание серии flink»

1. Автор книги «Углубленное понимание принципов проектирования и практики Flink Core» 2.
Разработчик популярного GitHub-проекта fink-boot (800+), посвященного экологической интеграции flink и spring 3. Бывший технический менеджер топовой консалтинговой компании, ныне старший разработчик крупной фабрики 4. Сертификат: разработчик программного обеспечения, администратор Apache kylin 5. Направление: разработка java-серверов, распределенная разработка, вычисления в реальном времени, инженер по разработке больших
данных

параметры, переданные в функцию

Flink предоставляет три способа упростить процесс передачи параметров в определяемые пользователем функции: параметры можно передавать в функции с помощью конструктора, метода withParameters(Configuration) или интерфейса ExecutionConfig.

Передать аргументы командной строки в функции

Во многих случаях разработанные приложения Flink зависят от внешних параметров конфигурации, которые используются для указания источников ввода и вывода (таких как пути к файлам или адреса служб), системных параметров (параллелизм, конфигурация времени выполнения) и параметров, специфичных для приложения (обычно используются в пользовательских функциях).

Flink предоставляет простой и практичный класс инструмента синтаксического анализа параметров с именем ParameterTool для решения этих проблем.Конечно, разработчикам не нужно использовать класс инструмента ParameterTool.Класс инструментов синтаксического анализа параметров других фреймворков (таких как Commons CLI и argparse4j) также можно использовать в программах Flink.

1. Чтение из файла .properties

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

import org.apache.flink.api.java.utils.ParameterTool;
import java.io.InputStream;

InputStream propertiesFileInputStream = ParamTemplate.class.getClassLoader().getResourceAsStream("flink-param.properties");

ParameterTool parameter = ParameterTool.fromPropertiesFile(propertiesFileInputStream);

2. Чтение параметров командной строки

Когда параметры командной строки соответствуют формату, требуемому классом инструментов ParameterTool, параметры командной строки могут быть правильно проанализированы.Формат командной строки такой, как "-input file:///mydata --elements 42" и другие параметры.

import org.apache.flink.api.java.utils.ParameterTool;
// 输出参数 --input hdfs:///mydata --elements 42
public static void main(String[] args) {
    
    ParameterTool parameter = ParameterTool.fromArgs(args);
}

3. Прочитайте значение в ParameterTool

Сам ParameterTool предоставляет множество методов для доступа к значениям. Ниже приведены некоторые примеры. Дополнительные методы см. в исходном коде класса ParameterTool.

ParameterTool parameters = // ...
parameter.getRequired("input");//返回给定键的String类型的值,如果键不存在,则该方法将会失败。

parameter.get("output", "myDefaultValue");//返回给定键的String类型的值,如果键不存在,它将返回给定的默认值"myDefaultValue"。

parameter.getLong("expectedCount", -1L);//返回给定键的Long类型的值,如果键不存在,它将返回给定的默认值-1L,如果该值不是Long类型,则该方法将会失败。

int number=parameter.getNumberOfParameters();//返回ParameterTool中的参数数量。

С тех пор мы можем напрямую использовать возвращаемые значения этих методов в основной функции приложения.Например, мы можем установить параллелизм задания, получив параметры командной строки:

import org.apache.flink.api.java.utils.ParameterTool;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

ParameterTool parameters = ParameterTool.fromArgs(args);
int parallelism = parameters.get("mapParallelism", 2);

final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(parallelism);
......

Guess you like

Origin blog.csdn.net/hbly979222969/article/details/125040035