怎么確定一個Flink job的資源
Slots && parallelism
一個算子的parallelism 是5 ,那么這個算子就需要5個slot,
公式 :一個算子的parallelism 是n ,那么這個算子就需要5個n
通俗理解:幾個並行度,就是有幾個線程處理。
如何計算Slot
如果不設置SlotSharingGroup,那么需要的Slot數為應用的最大並行度數。
設置slot就是設置線程數。
設置parallelism 的依據是什么?
一個算子到底設置幾個(parallelism)線程執行呢?
solt 是用來對taskmanager內存進行平均分配的,每個solt內存都相同,也就是每一個並行度的內存是一樣的。
如果一個算子需要的內存多,就多設置幾個並行度。
如果一個算子需要的內存少,就少設置幾個並行度,省下來的slot讓給別人。因為slot是可以共享的。
怎么給一個任務分配 slot和內存?
假設有以下條件
- 集群
假設一個flink session 的一個slot 是2G內存.(如下腳本)
- 任務
你有50G的數據要處理
分配多少slot和內存是測試出來的,看哪個配置速率更快,以達到資源的合理利用.
假設 准備給他20G內存.
那么就是 20/2(一個slot 是2G內存) = 10 slot
於是就是slot 10 個, 內存是20g. parallelism 是10
腳本
/data/flink-1.10.1/bin/flink run \
-yid $application_id \
-yD env.java.opts="-XX:+UseG1GC" \
-c xxxxx.mainClass \
/data/hadoop/data/xxxxx.jar
啟動yarn-session 腳本
#!/bin/bash
/data/flink-1.10.1/bin/yarn-session.sh \
-s 4 \
-jm 1g \
-tm 8g \
-d \
-ynm yarn-flink
一個taskmanager 8G內存,共4個slot 那么,一個slot就是2G內存.