flink 並行度 任務鏈 task分配

2021-10-02 02:48:04 字數 2486 閱讀 5755

不同的運算元操作複雜度不同

我們可以稱像source map sink 這種 計算不複雜的運算元稱為非資源密集型的運算元 aggregate reduce sum window 這種計算複雜的運算元稱為為資源密集型的運算元

如果把這兩種運算元的優先順序看作相同,平等的分配到slo中,當資料流source 來的資料速率相同時,會造成有些slot一直在跑複雜的運算元,一直在執行中,當時一直跑簡單運算元的slot就會很空閒。

flink 這裡是 非資源密集型的 運算元和資源密集型的運算元可以分配到同乙個slot中 ,這樣所有的slot之間任務就會平等,不會存在一直空閒一直高負載。

乙個task的並行度是6 就會分為6個並行的task來跑,這六個task不能分配到同乙個slot中必須乙個slot只有乙個。 也就是說 當你的集群的slot只有6 ,你不能設定運算元的 並行度超過6。

flink 也能做到把非資源密集型和資源密集型的運算元分到不同的slot中 這裡需要設定共享組,非資源 密集型 的運算元在乙個共享組,資源密集 型的運算元在乙個共享組,這樣這兩種運算元就不會共享的使用slot。預設情況下算有運算元都屬於同乙個共享組,共享所有slot。

下面看幾個例子

乙個特定運算元的 子任務(subtask)的個數被稱之為其並行度(parallelism)。

一般情況下,乙個 stream 的並行度,可以認為就是其所有運算元中最大的並行度

idea裡執行flink程式預設並行度是執行程式機器的核心數量。

每乙個運算元都可以單獨設定並行。

.

map(

(_,1))

.setparallelism(2

)

也可以全域性指定並行度。

val env = executionenvironment.getexecutionenvironment.

setparallelism(2

)此時不支援並行的運算元 比如env.

readtextfile

(inputpath) 就會報錯

具體情況調整source和sink的並行度

三個位置可以配置並行度

優先順序**》提交》配置檔案

**裡設定用**裡的,**裡沒設定用提交時設定的,都沒設定用配置檔案中的配置。

**裡運算元單獨設定優先順序高於全域性設定優先順序

可以設定共享組 把 task 盡量均勻的分配到整個集群中

任務鏈合理的設定並行度

把多個運算元合併為乙個task,原本的運算元成為裡面的subtask

滿足任務鏈需要一下條件

one-to-one :stream維護著分割槽以及元素的順序(比如source和map之間)。這意味著map 運算元的子任務看到的元素的個數以及順序跟 source 運算元的子任務生產的元素的個數、順序相同。map、fliter、flatmap等運算元都是one-to-one的對應關係。

redistributing:stream的分割槽會發生改變。每乙個運算元的子任務依據所選擇的transformation傳送資料到不同的目標任務。例如,keyby 基於 hashcode 重分割槽、而 broadcast 和 rebalance 會隨機重新分割槽,這些運算元都會引起redistribute過程,而 redistribute 過程就類似於 spark 中的 shuffle 過程。

並行度不同的運算元之前傳遞資料會進行重分割槽,redistributing型別的運算元也會進行重分割槽。

執行圖如下

當然還可以禁止掉合成任務鏈

單個運算元不參與合成任務鏈

.

flatmap

(_.split

(" "))

.disablechaining

()

從單個運算元開啟乙個新的任務鏈

.

startnewchain

()

全域性不合成任務鏈

env.

disableoperatorchaining

()

下面是乙個全域性不合成任務鏈的job執行圖,只是在上乙個例子的基礎上新增了全域性不合成任務鏈。

flink之slot 並行度 任務鏈

2.並行度,乙個特定運算元的子任務的個數被稱之為其並行度,可以認為乙個流程式的並行度是 所有運算元中最大的並行度 乙個程式中,不同的運算元並行度可能不同 3.因為是資源密集型的運算元的子任務在不同的slot中,所以可以做到負載均衡。4.非資源密集型的子任務和資源密集型的子任務不被放到同乙個slot中...

flink並行度設定問題

之前寫過一篇文章,介紹flink的並行度問題 並行度的設定有幾種,按優先順序先後依次是 公司用的flink是基於開源改造的,跟開源還是有些區別,使用過程中也碰到一些問題,這裡簡單總結下。有兩個跟並行度相關的配置 任務啟動的時候,slot數量 numberoftaskmanagers numberof...

Spark任務並行度分析

優化 spark 應用的乙個主要手段就是合理設定任務執行的並行度,盡可能的利用集群資源 從而提高執行效率。而影響 spark 並行度的因素主要有如下幾個 spark 應用缺省會為每乙個 rdd 分割槽建立乙個 task,所以輸入 rdd 的分割槽數直接影響待 分配的 task 總數,task 任務數...