1.?什么是job
Job簡(jiǎn)單講就是提交給spark的任務(wù)。
2.?什么是stage
Stage是每一個(gè)job處理過程要分為的幾個(gè)階段谣沸。
3.什么是task
Task是每一個(gè)job處理過程要分幾為幾次任務(wù)刷钢。Task是任務(wù)運(yùn)行的最小單位。最終是要以task為單位運(yùn)行在executor中乳附。
4.?Job和stage和task之間有什么關(guān)系
Job <---> 一個(gè)或多個(gè)stage <---> 一個(gè)或多個(gè)task
下圖是一個(gè)job分成了三個(gè)stage:
5.一個(gè)stage的task的數(shù)量是有誰來決定的内地?
是由輸入文件的切片個(gè)數(shù)來決定的。在HDFS中不大于128m的文件算一個(gè)切片(默認(rèn)128m)赋除。通過算子修改了某一個(gè)rdd的分區(qū)數(shù)量阱缓,task數(shù)量也會(huì)同步修改。
6.一個(gè)job任務(wù)的task數(shù)量是由誰來決定的举农?
一個(gè)job任務(wù)可以有一個(gè)或多個(gè)stage荆针,一個(gè)stage又可以有一個(gè)或多個(gè)task。所以一個(gè)job的task數(shù)量是 ?(多個(gè)stage的task數(shù)量)的總和。
上圖就是job1有2個(gè)stage航背,共3個(gè)task喉悴。
7.每一個(gè)stage中的task最大的并行度?
并行度:是指指令并行執(zhí)行的最大條數(shù)玖媚。在指令流水中箕肃,同時(shí)執(zhí)行多條指令稱為指令并行。
理論上:每一個(gè)stage下有多少的分區(qū)今魔,就有多少的task突雪,task的數(shù)量就是我們?nèi)蝿?wù)的最大的并行度。
(一般情況下涡贱,我們一個(gè)task運(yùn)行的時(shí)候咏删,使用一個(gè)cores)
實(shí)際上:最大的并行度,取決于我們的application任務(wù)運(yùn)行時(shí)使用的executor擁有的cores的數(shù)量问词。
如圖所示督函,cores為4,那么最大的并行度就是4激挪。
8.如果我們的task數(shù)量超過這個(gè)cores的總數(shù)怎么辦辰狡?
--num-executors 2 --executor-memory 512m --executor-cores 2
當(dāng)前stage有200個(gè)task,先執(zhí)行cores個(gè)數(shù)量的task垄分,然后等待cpu資源空閑后宛篇,繼續(xù)執(zhí)行剩下的task。
9.spark執(zhí)行時(shí)讀條中的內(nèi)容講解
Stage60:當(dāng)前的stage編號(hào)
(105+2)/200:200:當(dāng)前stage的task的數(shù)量薄湿;105:已完成的task數(shù)量叫倍;4:等待執(zhí)行的task數(shù)量。