最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

重點(diǎn) | Spark的并行度如何設(shè)置?

2023-03-01 14:31 作者:ingemar-  | 我要投稿

Spark Application運(yùn)行時,涵蓋很多概念,主要如下表格:

官方文檔:http://spark.apache.org/docs/2.4.5/cluster-overview.html#glossary

Application:指的是用戶編寫的Spark應(yīng)用程序/代碼,包含了Driver功能代碼和分布在集群中多個節(jié)點(diǎn)上運(yùn)行的Executor代碼;

Driver:Spark中的Driver即運(yùn)行上述Application的Main()函數(shù)并且創(chuàng)建SparkContext,SparkContext負(fù)責(zé)和ClusterManager通信,進(jìn)行資源的申請、任務(wù)的分配和監(jiān)控等;

Cluster Manager:指的是在集群上獲取資源的外部服務(wù),Standalone模式下由Master負(fù)責(zé),Yarn模式下ResourceManager負(fù)責(zé);

Executor:是運(yùn)行在工作節(jié)點(diǎn)Worker上的進(jìn)程,負(fù)責(zé)運(yùn)行任務(wù),并為應(yīng)用程序存儲數(shù)據(jù),是執(zhí)行分區(qū)計算任務(wù)的進(jìn)程;

RDD:Resilient Distributed Dataset彈性分布式數(shù)據(jù)集,是分布式內(nèi)存的一個抽象概念;

DAG:Directed Acyclic Graph有向無環(huán)圖,反映RDD之間的依賴關(guān)系和執(zhí)行流程;

Job:作業(yè),按照DAG執(zhí)行就是一個作業(yè),Job==DAG;

Stage:階段,是作業(yè)的基本調(diào)度單位,同一個Stage中的Task可以并行執(zhí)行,多個Task組成TaskSet任務(wù)集;

Task:任務(wù),運(yùn)行在Executor上的工作單元,1個Task計算1個分區(qū),包括pipline上的一系列操作;


Spark作業(yè)中,各個stage的task數(shù)量,代表了Spark作業(yè)在各個階段stage的并行度!


1 資源并行度與數(shù)據(jù)并行度


在Spark Application運(yùn)行時,并行度可以從兩個方面理解:

1)、資源的并行度:由節(jié)點(diǎn)數(shù)(executor)和cpu數(shù)(core)決定的

2)、數(shù)據(jù)的并行度:task的數(shù)據(jù),partition大小

task又分為map時的task和reduce(shuffle)時的task;

task的數(shù)目和很多因素有關(guān),資源的總core數(shù),spark.default.parallelism參數(shù),spark.sql.shuffle.partitions參數(shù),讀取數(shù)據(jù)源的類型,shuffle方法的第二個參數(shù),repartition的數(shù)目等等。

如果Task的數(shù)量多,能用的資源也多,那么并行度自然就好。如果Task的數(shù)據(jù)少,資源很多,有一定的浪費(fèi),但是也還好。如果Task數(shù)目很多,但是資源少,那么會執(zhí)行完一批,再執(zhí)行下一批。所以官方給出的建議是,這個Task數(shù)目要是core總數(shù)的2-3倍為佳。如果core有多少Task就有多少,那么有些比較快的task執(zhí)行完了,一些資源就會處于等待的狀態(tài)。


2 設(shè)置Task數(shù)量


將Task數(shù)量設(shè)置成與Application總CPU Core 數(shù)量相同(理想情況,150個core,分配150 Task)官方推薦,Task數(shù)量,設(shè)置成Application總CPU Core數(shù)量的2~3倍(150個cpu core,設(shè)置task數(shù)量為300~500)與理想情況不同的是:有些Task會運(yùn)行快一點(diǎn),比如50s就完了,有些Task可能會慢一點(diǎn),要一分半才運(yùn)行完,所以如果你的Task數(shù)量,剛好設(shè)置的跟CPU Core數(shù)量相同,也可能會導(dǎo)致資源的浪費(fèi),比如150 Task,10個先運(yùn)行完了,剩余140個還在運(yùn)行,但是這個時候,就有10個CPU Core空閑出來了,導(dǎo)致浪費(fèi)。如果設(shè)置2~3倍,那么一個Task運(yùn)行完以后,另外一個Task馬上補(bǔ)上來,盡量讓CPU Core不要空閑。


3 設(shè)置Application的并行度


參數(shù)spark.defalut.parallelism默認(rèn)是沒有值的,如果設(shè)置了值,是在shuffle的過程才會起作用


4 案例說明


當(dāng)提交一個Spark Application時,設(shè)置資源信息如下,基本已經(jīng)達(dá)到了集群或者yarn隊(duì)列的資源上限:

Task沒有設(shè)置或者設(shè)置的很少,比如為100個task ,平均分配一下,每個executor 分配到2個task,每個executor 剩下的一個cpu core 就浪費(fèi)掉了!

雖然分配充足了,但是問題是:并行度沒有與資源相匹配,導(dǎo)致你分配下去的資源都浪費(fèi)掉了。合理的并行度的設(shè)置,應(yīng)該要設(shè)置的足夠大,大到可以完全合理的利用你的集群資源??梢哉{(diào)整Task數(shù)目,按照原則:Task數(shù)量,設(shè)置成Application總CPU Core數(shù)量的2~3倍

實(shí)際項(xiàng)目中,往往依據(jù)數(shù)據(jù)量(Task數(shù)目)配置資源。


重點(diǎn) | Spark的并行度如何設(shè)置?的評論 (共 條)

使用qq登录你需要登录后才可以评论。
台东县| 焦作市| 南涧| 连云港市| 巴林左旗| 平武县| 义马市| 五台县| 丰镇市| 闵行区| 沈丘县| 剑阁县| 广灵县| 牙克石市| 兰考县| 黔西县| 田林县| 宿州市| 辛集市| 宁夏| 广饶县| 静安区| 兴文县| 赤壁市| 垦利县| 都安| 三明市| 驻马店市| 天门市| 蕲春县| 彰化市| 河北省| 余江县| 双峰县| 陆川县| 临桂县| 卢氏县| 云浮市| 鄂托克前旗| 龙陵县| 泗阳县|