英文原文地址:https://spark.apache.org/docs/latest/cluster-overview.htmlhtml
集羣模式概述node
本文檔簡單介紹了spark如何在集羣中運行,它使得你更容易理解spark相關的組件。關於如何在一個集羣中運行spark,請參考application submission guide 。python
組件web
spark應用以多個進程的形式運行於一個集羣中,它使用你所定義的主程序(或者叫驅動程序)中的SparkContext這個對象來協調。當運行於集羣時,SparkContext能夠運行於多種的集羣管理器中(包括spark自帶的standalone集羣,以及mesos和yarn),它們都被用於在不一樣的應用間分配資源。當spark應用鏈接到了集羣管理器後,(1)首先它將從集羣中的節點獲取執行器(executor),這些執行器就是用來運行計算或者存儲數據的進程(2)而後,spark會將你的應用代碼(jar包或者python文件)發送給執行器(3)最後,SparkContext將具體的任務(task)發送給執行器運行。apache
關於上面的架構,有幾佔須要注意的:瀏覽器
一、每個應用都擁有它本身獨立的執行器進程(executor processes),這些進程在應用的整個生命週期中保持運行,且通常會同時運行多個線程。這有利於不一樣應用的分離,但同時,它也意味着數據不能在不一樣的spark應用(或者說不一樣的SparkContext)中共享,除非你先將數據輸出到外部存儲中。網絡
二、spark獨立於底層的cluster manager,只要保證它可以獲取到executor processes,而且這些進程之間能互相通訊。這就很容易將應用運行於不一樣的cluster manager,如mesos/yarn等,甚至這些cluster manager還能運行其它類型的應用。架構
三、驅動程序必須在整個生命週期中監聽並接受執行器的鏈接 (e.g., see spark.driver.port and spark.fileserver.port in the network config section)。所以驅動程序對於工做節點來講,必須能夠經過網絡訪問的。app
集羣管理器的類型ide
目前spark支持如下幾種集羣管理器:
此外,spark的EC2 launch scripts 使得你能夠很方便的在亞馬遜EC2上運行獨立集羣。
提交應用
能夠經過spark-submit向任意類型的集羣提交應用。 application submission guide 詳細介紹瞭如何向spark集羣提交應用。
監控
每個驅動程序都有一個web UI(通常在4040端口),它展現了應用的信息,包括運行的任務,執行器以及存儲的使用狀況等。在一個瀏覽器中打開 http://<driver-node>:4040 就可訪問到這個UI,monitoring guide詳細介紹了其它監控項。
做業調度
spark在不一樣應用間已經應用內部提供資源分配的控制, job scheduling overview詳細介紹了這些內容。
術語
下面總結了你在使用spark中須要用到的術語:
Term |
Meaning |
Application |
用戶建立的spark應用,它由一個驅動程序和多個執行器組成。 |
Application jar |
jar包包括了用戶的spark應用,有時候,用戶會建立一個超級包,它包括了這個包的全部依賴,可是無論如何,用戶Jar包不該該包括hadoop和spark的library,它們會在運行時自動加載。 |
Driver program |
運行應用main函數的進程,同時它也用於建立SparkContext。 |
Cluster manager |
一個用於獲取集羣資源的外部服務,如 ( standalone manager, Mesos, YARN) |
Deploy mode |
用於區分在哪裏運行驅動程序,在cluster模式中,會在集羣內運行驅動程序,而在client模式中,在集羣外運行驅動程序。 |
Worker node |
集羣中能夠運行應用代碼的節點 |
Executor |
某個應用運行於worker node的進程,它運行多個任務(task),而且在內存或者磁盤中保存數據。每個應用都有本身的一個或者多個executors |
Task |
在executor中運行的工做單元 |
Job |
由多個task組成的並行計算,你會在driver的log中看到這個詞 |
Stage |
每個job會被切分爲一個更小的任務集合,這些任務集羣被稱爲stage,它們之間互相依賴(如MR中的map和reduce),你會在driver的log中看到這個詞 |