Как Apache Flink реализует итерацию?

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


person Pango    schedule 24.11.2015    source источник


Ответы (1)


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

В других системах часто нет строгих технических причин для отказа от поддержки циклов. Разрешение циклов общим способом обычно запрещено, потому что это может привести к бесконечному циклу (т. Е. Кортеж вращает цикл бесконечно, а программа не завершается).

Flink отслеживает цикл, подсчитывая количество итераций. Таким образом, Flink может отслеживать, какие кортежи к каким итерациям принадлежат, и может, например, избежать того, чтобы кортежи из новой итерации «переняли» кортежи из более старой. Кроме того, он позволяет Flink определять, равны ли результаты итераций n и n+1. Равный результат означает завершенное вычисление, позволяющее Flink прервать бесконечный цикл и завершить его (это справедливо для так называемых итераций с фиксированной точкой).

Подробную информацию можно найти в этом исследовательском документе: https://dl.acm.org/citation.cfm?id=2350245

Использование итерации в вашей программе описано здесь: https://ci.apache.org/projects/flink/flink-docs-release-0.10/apis/programming_guide.html#iteration-operators

person Matthias J. Sax    schedule 24.11.2015
comment
Технически Flink не назначает счетчик итераций каждому кортежу. Вместо этого он выполняет каждую итерацию, а затем ждет, пока все элементы не будут обработаны для этой итерации. Только после этого начинается следующая итерация. - person Till Rohrmann; 24.11.2015