2015-11-24 69 views

回答

5

如果Flink執行迭代程序,數據流圖不是DAG,但允許循環。然而,這個週期不是任意的,必須遵循一定的模式,以允許Flink在一定程度上控制這個循環流。

其他系統通常沒有嚴格的技術原因不支持週期。以通用方式允許循環通常是禁止的,因爲它可能導致無限循環(即,一個元組永遠旋轉循環並且程序不會終止)。

Flink通過計算迭代次數來跟蹤週期。通過這種方式,Flink可以跟蹤哪個元組屬於哪個迭代,並且可以例如避免來自新迭代的元組「從新元代接替」元組一次。此外,它允許Flink檢測迭代結果nn+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

+1

技術上,弗林克不分配迭代計數器每個元組。相反,它會執行每次迭代,然後等待,直到爲此迭代處理完所有元素。只有這樣,下一次迭代纔會開始。 –

+1

更新了我的答案。 downvote很難... :) –