Apache Flink 是如何实现迭代的?
How does Apache Flink implement iteration?
大数据的DAG(有向无环图)执行很常见。我想知道 Apache Flink 如何实现迭代,因为该图可能是循环的。
如果Flink执行迭代程序,数据流图不是DAG,但允许循环。但是这个循环不是任意的,必须遵循一定的模式才能让Flink在一定程度上控制这个循环流
其他系统不支持循环往往没有严格的技术原因。以通用方式允许循环通常是被禁止的,因为它可能会导致无限循环(即,元组永远旋转循环并且程序不会终止)。
Flink通过计算迭代次数来跟踪周期。这样,Flink 可以跟踪哪些元组属于哪些迭代,例如,可以避免来自新迭代的元组 "taking over" 来自旧迭代的元组。此外,它允许 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
大数据的DAG(有向无环图)执行很常见。我想知道 Apache Flink 如何实现迭代,因为该图可能是循环的。
如果Flink执行迭代程序,数据流图不是DAG,但允许循环。但是这个循环不是任意的,必须遵循一定的模式才能让Flink在一定程度上控制这个循环流
其他系统不支持循环往往没有严格的技术原因。以通用方式允许循环通常是被禁止的,因为它可能会导致无限循环(即,元组永远旋转循环并且程序不会终止)。
Flink通过计算迭代次数来跟踪周期。这样,Flink 可以跟踪哪些元组属于哪些迭代,例如,可以避免来自新迭代的元组 "taking over" 来自旧迭代的元组。此外,它允许 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