Сбор объектов Apache Beam PCollection в память драйвера - PullRequest
0 голосов
/ 07 ноября 2018

Можно ли собирать объекты в PCollection в Apache Beam в память драйвера? Что-то вроде:

PCollection<String> distributedWords = ...
List<String> localWords = distributedWords.collect();

Я заимствовал этот метод у Apache Spark, но мне было интересно, имеет ли Apache Beam аналогичную функциональность или нет!?

1 Ответ

0 голосов
/ 07 ноября 2018

Не напрямую. Конвейер может записать вывод в приемник (например, GCS bucket или таблицу BigQuery) и сообщить о ходе выполнения программе драйвера, если это необходимо, через что-то вроде PubSub. Затем программа-драйвер читает из сохраненных данных из общего источника. Этот подход будет работать для всех бегунов Beam.

Могут быть другие обходные пути для конкретных случаев. Например, DirectRunner - это локальный механизм выполнения в памяти, который последовательно запускает конвейер локально в процессе. Он используется в основном для тестирования, и если он подходит для вашего случая использования, вы можете использовать его, например, сохраняя обработанные данные в общем хранилище в памяти, к которому могут обращаться как программа драйвера, так и логика выполнения конвейера, например, см. TestTable . Это не будет работать на других бегунов.

В общем случае выполнение конвейера может происходить параллельно, а специфика того, как это происходит, контролируется бегуном (например, Flink, Dataflow или Spark). Лучевой конвейер - это всего лишь определение преобразований, которые вы применяете к своим данным, а также к источникам и приемникам данных. Ваша драйверная программа сама не читает и не собирает данные и не взаимодействует напрямую с исполнительными узлами, в основном она только отправляет определение конвейера тому, кто выполняет его, а затем решает, как его выполнить, потенциально распространяя его на парк машин ( или использует другие примитивы выполнения для его запуска). И затем каждый исполняющий узел может независимо обрабатывать данные, извлекая их из входного источника, преобразовывая и затем записывая их в выходные данные. Узел вообще не знает о программе драйвера, он только знает, как выполнить определение конвейера. Среды выполнения / бегуны могут сильно отличаться, и в настоящее время бегунам не требуется реализовывать такой механизм сбора. Смотри https://beam.apache.org/documentation/execution-model/

...