并行度
一個Flink程序由多個Operator組成(source、transformation和 sink)。
一個Operator由多個并行的Task(線程)來執(zhí)行, 一個Operator的并行Task(線程)數(shù)目就被稱為該Operator(任務(wù))的并行度(Parallel)
并行度可以有如下幾種指定方式
1.Operator Level(算子級別)(可以使用)
一個算子、數(shù)據(jù)源和sink的并行度可以通過調(diào)用 setParallelism()方法來指定
2.Execution Environment Leel(Env級別)(可以使用)
執(zhí)行環(huán)境(任務(wù))的默認(rèn)并行度可以通過調(diào)用setParallelism()方法指定。為了以并行度3來執(zhí)行所有的算子、數(shù)據(jù)源和data sink, 可以通過如下的方式設(shè)置執(zhí)行環(huán)境的并行度:
執(zhí)行環(huán)境的并行度可以通過顯式設(shè)置算子的并行度而被重寫
?
3.Client Level(客戶端級別,推薦使用)(可以使用)
并行度可以在客戶端將job提交到Flink時設(shè)定。
對于CLI客戶端,可以通過-p參數(shù)指定并行度
./bin/flink run -p 10 WordCount-java.jar
4.System Level(系統(tǒng)默認(rèn)級別,盡量不使用)
在系統(tǒng)級可以通過設(shè)置flink-conf.yaml文件中的parallelism.default屬性來指定所有執(zhí)行環(huán)境的默認(rèn)并行度
示例
?
?
說明
Example1
在fink-conf.yaml中 taskmanager.numberOfTaskSlots 默認(rèn)值為1,即每個Task Manager上只有一個Slot ,此處是3
Example1中,WordCount程序設(shè)置了并行度為1,意味著程序 Source、Reduce、Sink在一個Slot中,占用一個Slot
Example2
通過設(shè)置并行度為2后,將占用2個Slot
Example3
通過設(shè)置并行度為9,將占用9個Slot
Example4文章來源:http://www.zghlxwxcb.cn/news/detail-586149.html
通過設(shè)置并行度為9,并且設(shè)置sink的并行度為1,則Source、Reduce將占用9個Slot,但是Sink只占用1個Slot文章來源地址http://www.zghlxwxcb.cn/news/detail-586149.html
注意
- 并行度的優(yōu)先級:算子級別 > env級別 > Client級別 > 系統(tǒng)默認(rèn)級別 (越靠前具體的代碼并行度的優(yōu)先級越高)
- 如果source不可以被并行執(zhí)行,即使指定了并行度為多個,也不會生效
- 盡可能的規(guī)避算子的并行度的設(shè)置,因為并行度的改變會造成task的重新劃分,帶來shuffle問題,
- 推薦使用任務(wù)提交的時候動態(tài)的指定并行度
- slot是靜態(tài)的概念,是指taskmanager具有的并發(fā)執(zhí)行能力; parallelism是動態(tài)的概念,是指程序運行時實際使用的并發(fā)能力
到了這里,關(guān)于Flink:并行度介紹和設(shè)置并行度的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!