Spark的基本術語

Spark作業的基本概念

Application:用戶自定義的Spark程序,用戶提交后,Spark為App分配資源將程序轉換并執行。

Driver Program:運行Application的main()函數并且創建SparkContext。

RDD DAG:當RDD遇到Action算子,將之前的所有算子形成一個有向無環圖(DAG)。再在Spark中轉化為Job,提交到集群進行執行。一個App中可以包含多Job。

Job:一個RDD Graph觸發的作業,往往由Spark Action算子觸發,在SparkContext中通過runJob方法向Spark提交Job。

Stage:每個Job會根據RDD的寬依賴關系被切分很多Stage,每個Stage中包含一組相同的Task,這一組Task也叫TaskSet。

Task:一個分區對應一個Task,Task執行RDD中對應Stage中所包含的算子。Task被封裝好后放入Executor的線程池中執行。Executor會在線程池中取得一個線程,分配給一個任務,之后任務執行完成,線程池回收線程。

Spark程序與作用概念映射

val rawFile = sc.textFile("README.md") //Application:1-6行

(將輸入的文本文件轉化為RDD)

val words = rawFile.flatMap(line=>line.split(" ")) //Job:1-5行

(將文本文件映射為word單詞,將文本文件進行分詞,轉換為一個單詞的RDD)

val wordNumber = words.map(w=>(w,1)) //Stage:1-3或4-5行

(將RDD中的每個單詞映射為,單詞名稱為key,value為1的kye-value對)

val wordCounts = wordNumber.reduceByKey(_+_) //Tasks:1-3或4-5行

(通過reduceBykey操作,將同一個單詞的數據進行聚集,進而統計好每一個單詞的個數)

wordCounts.foreach(println)

(foreach輸出每一個單詞的計數)

wordCounts.saveAsTextFile

(saveAsTextFile將結果保存到磁盤)

6行代碼對應為一個Application,這個應用程序中有兩個Job,1-5行是一個Job,1-4 + 6行是一個Job。

在1-5行這個Job中:

1-3行是一個stage,4-5行是一個stage,因為map和reduceByKey之間要進行shuffle操作。

Spark作業運行流程

1.Spark程序轉換,將應用程序提交到集群,集群將程序由一個application轉換成不同的任務集;

2.在集群中輸入數據塊;

3.集群會根據調度策略執行各個Stage的Tasks分發到各個節點,在每個數據塊上進行執行;

4.執行完成后,會根據shuffle在集群中將結果進行混洗,再進行下一階段的Stage,直到所有Stage執行完畢,輸出結果返回。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容