日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

flink java 并行度_flink solt和并行度

發布時間:2025/3/12 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 flink java 并行度_flink solt和并行度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

Flink運行時主要角色有兩個:JobManager和TaskManager,無論是standalone集群,flink on yarn都是要啟動這兩個角色。JobManager主要是負責接受客戶端的job,調度job,協調checkpoint等。TaskManager執行具體的Task。TaskManager為了對資源進行隔離和增加允許的task數,引入了slot的概念,這個slot對資源的隔離僅僅是對內存進行隔離,策略是均分,比如taskmanager的管理內存是3GB,假如有兩個個slot,那么每個slot就僅僅有1.5GB內存可用。Client這個角色主要是為job提交做些準備工作,比如構建jobgraph提交到jobmanager,提交完了可以立即退出,當然也可以用client來監控進度。

Jobmanager和TaskManager之間通信類似于Spark 的早期版本,采用的是actor系統。如下圖

什么是task?

在spark中:

RDD中的一個分區對應一個task,task是單個分區上最小的處理流程單元。被送到某個Executor上的工作單元,和hadoopMR中的MapTask和ReduceTask概念一樣,是運行Application的基本單位,多個Task組成一個Stage

上述引入spark的task主要是想帶著大家搞明白,以下幾個概念:

Flink的并行度由什么決定的?

Flink的task是什么?

Flink的并行度由什么決定的?

這個很簡單,Flink每個算子都可以設置并行度,然后就是也可以設置全局并行度。

Api的設置

.map(new RollingAdditionMapper()).setParallelism(10)

全局配置在flink-conf.yaml文件中,parallelism.default,默認是1:可以設置默認值大一點

Flink的task是什么?

按理說應該是每個算子的一個并行度實例就是一個subtask-在這里為了區分暫時叫做substask。那么,帶來很多問題,由于flink的taskmanager運行task的時候是每個task采用一個單獨的線程,這就會帶來很多線程切換開銷,進而影響吞吐量。為了減輕這種情況,flink進行了優化,也即對subtask進行鏈式操作,鏈式操作結束之后得到的task,再作為一個調度執行單元,放到一個線程里執行。如下圖的,source/map 兩個算子進行了鏈式;keyby/window/apply有進行了鏈式,sink單獨的一個。

說明:圖中假設是source/map的并行度都是2,keyby/window/apply的并行度也都是2,sink的是1,總共task有五個,最終需要五個線程。

默認情況下,flink允許如果任務是不同的task的時候,允許任務共享slot,當然,前提是必須在同一個job內部。

結果就是,每個slot可以執行job的一整個pipeline,如上圖。這樣做的好處主要有以下幾點:

1.Flink 集群所需的taskslots數與job中最高的并行度一致。也就是說我們不需要再去計算一個程序總共會起多少個task了。

2.更容易獲得更充分的資源利用。如果沒有slot共享,那么非密集型操作source/flatmap就會占用同密集型操作 keyAggregation/sink 一樣多的資源。如果有slot共享,將基線的2個并行度增加到6個,能充分利用slot資源,同時保證每個TaskManager能平均分配到重的subtasks,比如keyby/window/apply操作就會均分到申請的所有slot里,這樣slot的負載就均衡了。

鏈式的原則,也即是什么情況下才會對task進行鏈式操作呢?簡單梗概一下:

上下游的并行度一致

下游節點的入度為1 (也就是說下游節點沒有來自其他節點的輸入)

上下游節點都在同一個 slot group 中(下面會解釋 slot group)

下游節點的 chain 策略為 ALWAYS(可以與上下游鏈接,map、flatmap、filter等默認是ALWAYS)

上游節點的 chain 策略為 ALWAYS 或 HEAD(只能與下游鏈接,不能與上游鏈接,Source默認是HEAD)

兩個節點間數據分區方式是 forward(參考理解數據流的分區)

用戶沒有禁用 chain

slot和parallelism

1.slot是指taskmanager的并發執行能力

在hadoop 1.x 版本中也有slot的概念,有興趣的讀者可以了解一下

taskmanager.numberOfTaskSlots:3

每一個taskmanager中的分配3個TaskSlot,3個taskmanager一共有9個TaskSlot

2.parallelism是指taskmanager實際使用的并發能力

parallelism.default:1

運行程序默認的并行度為1,9個TaskSlot只用了1個,有8個空閑。設置合適的并行度才能提高效率。

3.parallelism是可配置、可指定的

1.可以通過修改$FLINK_HOME/conf/flink-conf.yaml文件的方式更改并行度

2.可以通過設置$FLINK_HOME/bin/flink 的-p參數修改并行度

3.可以通過設置executionEnvironmentk的方法修改并行度

4.可以通過設置flink的編程API修改過并行度

5.這些并行度設置優先級從低到高排序,排序為api>env>p>file.

6.設置合適的并行度,能提高運算效率

7.parallelism不能多與slot個數。

slot和parallelism總結

1.slot是靜態的概念,是指taskmanager具有的并發執行能力

2.parallelism是動態的概念,是指程序運行時實際使用的并發能力

3.設置合適的parallelism能提高運算效率,太多了和太少了都不行

4.設置parallelism有多中方式,優先級為api>env>p>file

總結

以上是生活随笔為你收集整理的flink java 并行度_flink solt和并行度的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。