Apache Spark 2.2.0 中文文檔 - 集羣模式概述 | ApacheCN

集羣模式概述

該文檔給出了 Spark 如何在集羣上運行、使之更容易來理解所涉及到的組件的簡短概述。通過閱讀 應用提交指南 來學習關於在集羣上啓動應用。

組件

Spark 應用在集羣上作爲獨立的進程組來運行,在您的 main 程序中通過 SparkContext 來協調(稱之爲 driver 程序)。

具體的說,爲了運行在集羣上,SparkContext 可以連接至幾種類型的 Cluster Manager(既可以用 Spark 自己的 Standlone Cluster Manager,或者 Mesos,也可以使用 YARN),它們會分配應用的資源。一旦連接上,Spark 獲得集羣中節點上的 Executor,這些進程可以運行計算並且爲您的應用存儲數據。接下來,它將發送您的應用代碼(通過 JAR 或者 Python 文件定義傳遞給 SparkContext)至 Executor。最終,SparkContext 將發送 Task 到 Executor 以運行。

Spark cluster components

這裏有幾個關於這個架構需要注意的地方 :

  1. 每個應用獲取到它自己的 Executor 進程,它們會保持在整個應用的生命週期中並且在多個線程中運行 Task(任務)。這樣做的優點是把應用互相隔離,在調度方面(每個 driver 調度它自己的 task)和 Executor 方面(來自不同應用的 task 運行在不同的 JVM 中)。然而,這也意味着若是不把數據寫到外部的存儲系統中的話,數據就不能夠被不同的 Spark 應用(SparkContext 的實例)之間共享。
  2. Spark 是不知道底層的 Cluster Manager 到底是什麼類型的。只要它能夠獲得 Executor 進程,並且它們可以和彼此之間通信,那麼即使是在一個也支持其它應用的 Cluster Manager(例如,Mesos / YARN)上來運行它也是相對簡單的。
  3. Driver 程序必須在自己的生命週期內(例如,請參閱 在網絡配置章節中的 spark.driver.port 章節。 監聽和接受來自它的 Executor 的連接請求。同樣的,driver 程序必須可以從 worker 節點上網絡尋址(就是網絡沒問題)。
  4. 因爲 driver 調度了集羣上的 task(任務),更好的方式應該是在相同的局域網中靠近 worker 的節點上運行。如果您不喜歡發送請求到遠程的集羣,倒不如打開一個 RPC 至 driver 並讓它就近提交操作而不是從很遠的 worker 節點上運行一個 driver。

Cluster Manager 類型

系統目前支持三種 Cluster Manager:

  • Standalone – 包含在 Spark 中使得它更容易來安裝集羣的一個簡單的 Cluster Manager。

  • Apache Mesos – 一個通用的 Cluster Manager,它也可以運行 Hadoop MapReduce 和其它服務應用。
  • Hadoop YARN –Hadoop 2 中的 resource manager(資源管理器)。
  • Kubernetes (experimental) – 除了上述之外,還有 Kubernetes 的實驗支持。 Kubernetes 提供以容器爲中心的基礎設施的開源平臺。 Kubernetes 的支持正在 apache-spark-on-k8s Github 組織中積極開發。有關文檔,請參閱該項目的 README。

提交應用程序

使用 spark-submit 腳本可以提交應用至任何類型的集羣。在 application submission guide 介紹瞭如何做到這一點。

監控

每個 driver 都有一個 Web UI,通常在端口 4040 上,可以顯示有關正在運行的 task,executor,和存儲使用情況的信息。 只需在 Web 瀏覽器中的http://<driver-node>:4040 中訪問此 UI。監控指南 中還介紹了其他監控選項。

Job 調度

Spark 即可以在應用間(Cluster Manager 級別),也可以在應用內(如果多個計算髮生在相同的 SparkContext 上時)控制資源分配。 在 任務調度概述 中更詳細地描述了這一點。

術語

下表總結了您將看到的用於引用集羣概念的術語:

Term(術語) Meaning(含義)
Application 用戶構建在 Spark 上的程序。由集羣上的一個 driver 程序和多個 executor 組成。
Application jar 一個包含用戶 Spark 應用的 Jar。有時候用戶會想要去創建一個包含他們應用以及它的依賴的 “uber jar”。用戶的 Jar 應該沒有包括 Hadoop 或者 Spark 庫,然而,它們將會在運行時被添加。
Driver program 該進程運行應用的 main() 方法並且創建了 SparkContext。
Cluster manager 一個外部的用於獲取集羣上資源的服務。(例如,Standlone Manager,Mesos,YARN)
Deploy mode 根據 driver 程序運行的地方區別。在 “Cluster” 模式中,框架在羣集內部啓動 driver。在 “Client” 模式中,submitter(提交者)在 Custer 外部啓動 driver。
Worker node 任何在集羣中可以運行應用代碼的節點。
Executor 一個爲了在 worker 節點上的應用而啓動的進程,它運行 task 並且將數據保持在內存中或者硬盤存儲。每個應用有它自己的 Executor。
Task 一個將要被髮送到 Executor 中的工作單元。
Job 一個由多個任務組成的並行計算,並且能從 Spark action 中獲取響應(例如 savecollect); 您將在 driver 的日誌中看到這個術語。
Stage 每個 Job 被拆分成更小的被稱作 stage(階段) 的 task(任務) 組,stage 彼此之間是相互依賴的(與 MapReduce 中的 map 和 reduce stage 相似)。您將在 driver 的日誌中看到這個術語。


發佈了63 篇原創文章 · 獲贊 29 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章