Spark 集群概述
本篇博客簡述 Spark 集群相關的概念。
概述
Spark 的"集群"不是提供運算服務的,而是一種資源分配的調度器。
執行任務的 Spark 進程作為客戶端向"集群"申請資源(運算節點), "集群"分配資源以后,
這個 Spark 進程會分解一些計算工作,并把他們放到這些申請來的資源中運行。
</div>提交給 Spark 執行的工作稱做application(應用),對應的主程序稱作:driver program。
driver program通過一個叫做SparkContext的對象來協調 Spark 集群中不同進程的任務。
</div>具體來說:
-
driver program向"集群"申請到得運算節點稱作 worker node;
</li> -
一旦申請到 worker node,driver program會連接這些 worker node, 并在 worker node 上創建(acquire)執行計算的進程(executor);
</li> -
接下來driver program將計算需要的代碼和數據發給executor;
</li> -
最后SparkContext將分解出來的task(任務) 發送給各個executor去執行。
</li> </ol>過程如下圖所示:
這里有一些注意點:
-
每個application都獲得自己獨立的executor進程,這個executor進程利用多個線程運行多個task。這樣可以保證不同application的隔離性,無論是調度端(driver program分解各自的task),還是執行端(每個executor只跑來自同一個application的task)。不過這也意味著,不同的application之間除非借助外部存儲系統(例如數據庫),否則是不可以共享數據的。
</li> -
Spark 是不需要知道運行在什么樣的 "集群" 上的。Spark 只需要可以創建進程,并且和這些進程通信,無論是運行在什么樣的集群上(eg. Mesos/YARN)都可以。
</li> -
driver program必須在整個生命周期中可以從不同的executor接受連接。因此,driver program對于executor來說,
必須是網路可及的。
</div> </li>因為由driver program分解task,它必須和worker節點很接近,最好在同一個局域網。
如果你不能做到這一點(例如從遠程提交application),最好開一個 RPC,利用靠近 Spark 集群的機器來運行driver program
</div> </li> </ol>Spark 集群的類型
實現集群的程序稱為:集群管理器。目前有三種集群管理器:
-
Standalone - 這個集群管理器打包在 spark 的程序里,是最簡單的集群管理器。
</li> -
Apache Mesos - 一個非常成熟的分布式操作系統,可以用來運行除 Spark 以外的很多系統。
</li> -
Hadoop YARN - Hadoop 的 資源管理器。
</li> </ul>術語表
術語 解釋 Application 在 Spark 上運行的工作, 由driver program和executors組成 Application jar 包含 Application 代碼的 jar 包。在一些應用場景中,jar 需要包含依賴的庫。不過永遠不要包含 Hadoop 和 Spark 的庫 Driver program 運行 Application 的main()函數的進程,并且 SparkContext 對象在此進程中創建 Cluster manager(集群管理器) 實現集群的資源調度分配的外部程序 Deploy mode 用于區分driver program進程在哪里運行。cluster模式下,driver在集群中的節點上運行。client模式下,driver在集群以外的地方運行 Worker node 集群中運行程序的節點 Executor 在worker node中為 各 Application 創建的進程。它會執行 Application 相關的 task,將它們的數據保存在內存中或磁盤上。 Task 執行具體計算的單元,會被發送給特定的executor執行 Job 一個由多個task組成的并行計算集,它們生成 Spark 動作(eg. save, collect) 的結果。這個術語會出現在driver的日志中 Stage 每個job會被分解成更小的task的集合,這些集合被稱作stage。它們彼此依賴(就像 MapReduce 中的 map 和 reduce 兩個stage);這個術語會出現在driver的日志中
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
-