Spark運行架構:
Spark運行架構包括集羣資源管理器(Cluster Manager)、運行作業任務的工作節點(Worker Node)、每個應用的任務控制節點(Driver)和每個工作節點上負責具體任務的執行進程(Executor)
與Hadoop MapReduce計算框架相比,Spark所採用的Executor有兩個優點:
- 是利用多線程來執行具體的任務(Hadoop MapReduce採用的是進程模型),減少任務的啓動開銷;
- 是Executor中有一個BlockManager存儲模塊,會將內存和磁盤共同作爲存儲設備,當需要多輪迭代計算時,可以將中間結果存儲到這個存儲模塊裏,下次需要時,就可以直接讀該存儲模塊裏的數據,而不需要讀寫到HDFS等文件系統裏,因而有效減少了IO開銷;或者在交互式查詢場景下,預先將表緩存到該存儲系統上,從而可以提高讀寫IO性能。
各部分介紹
-
Application = a driver program + executors on the cluster
應用程序:他包含一個driver和多個executor -
Application jar = a jar containing the user’s Spark application.
-
driver program = The process running the main() function of the application and create SparkContext()
驅動是運行應用程序的main()並創建SparkContext的進程;如果驅動器程序終
止,那麼 Spark 應用也就結束了。主要負責:
1)把用戶程序轉爲任務
2)跟蹤 Executor 的運行狀況
3)爲執行器節點調度任務
4) UI 展示應用運行狀況 -
cluster manager is an external service for acquiring resources on the cluster
集羣管理器 通過cluster manager 去standalone/Mesos/Yarn/K8S/…上申請資源 -
Deploy Mode 主要區別在於,Driver 程序的運行節點
client:Diver run local Driver ;
程序運行在客戶端, 適用於交互、調試,希望立即看到 app 的輸出
cluster:Driver run Cluster;
Driver 程序運行在由ResourceManager啓動的APPMaster,適用於生產環境 -
Executor 相當於 container 容器
A process launched for an application on a worker node,
that runs tasks and keeps data in memory or disk storage across them.
Each application has its own executors.
一個 Executor 可以運行一個Application的多個task;
Spark Executor 是一個工作進程,負責在 Spark 作業中運行任務,任務間相互獨立。
Spark 應用啓動時, Executor 節點被同時啓動,並且始終伴隨着整個 Spark 應用的生命週期而存在。如果有 Executor 節點發生了故障或崩潰, Spark 應用也可以繼續執行,會將出錯節點上的任務調度到其他 Executor 節點上繼續運行。主要負責:
1)負責運行組成 Spark 應用的任務,並將結果返回給驅動器進程;
2)通過自身的塊管理器( Block Manager)爲用戶程序中要求緩存的 RDD 提供內存式存儲。 RDD 是直接緩存在 Executor 進程內的,因此任務可以在運行時充分利用緩存數據加速運算。 -
Task
A unit of work that will be sent to one executor
1. Task 是最小的工作單元,跑在 Executor 上;
2. 一個partition 就是一個 Task -
job
1. 在Spark上,只要運行一個action 就是一個job
2. job是一個並行的計算,包含多個task -
Stage
1. shuffle會產生stage
2. job stages tasks task是最小的運行單元
3. stage相關是有依賴關係的,如果有依賴關係,stage執行是有先後順序
4. stage名字是以最後一個算子命名的
Spark 運行注意點
- Each application gets its own executor processes,
it means that data cannot be shared across different Spark applications - Spark is agnostic to the underlying cluster manager.
Spark是不關注底層是運行在哪裏的,只要獲取了對應的excutor processes,
他們之間就可以通信。這種模式使得一個Cluster Manager 可以對應多個Application - The driver program must listen for and accept incoming connections from its executors
Driver Program 必須和 Executor 網絡是通的。一般是將他們放在一個內網裏 - driver should be run close to the worker nodes
Driver要儘可能地靠近workernodes