由於yarn默認容器資源為最小核心數,即一個cpu,
所以我們要根據並行度去調整分配的cpu資源
程序如下:指定並行度為5,指定每個TM的slot數為2
-p 5 \
-Dtaskmanager.numberOfTaskSlots=2 \
所以雖然配置了2個slot(並發度為2),但是兩個task不能同時運行,因為只有一個cpu
查看yarn的ui,可以看到只用到了4個cpu。
因為我們是5個並行度,所以需要至少3個tm才能運行(3個tm有6個slot)。所以用到的cpu=tm的數量*tm分配的核心數+一個jm使用的cpu=3*1+1=4
打開配置文件capacity-scheduler.xml,將defaultResourceCalculator注釋掉,將下面的DominantResourceCalculator的注釋去掉。yarn將動態調整容器內的cpu資源,由於我們設置了slot為2,yarn會調整成2個
重啟程序,打開ui查看,使用的cpu核心數變成了7個 ,因為是 3*2+1
我們還可以強行指定yarn的核心數,這里指定為3
-Dyarn.containers.vcores=3 \
ui如下:
使用的cpu變成了10個,因為每個tm被分配了3個核心,3*3+1=10