Spark 集群概述

jopen 9年前發布 | 10K 次閱讀 Spark 分布式/云計算/大數據

 

本篇博客簡述 Spark 集群相關的概念。

概述

Spark 的"集群"不是提供運算服務的,而是一種資源分配的調度器。

執行任務的 Spark 進程作為客戶端向"集群"申請資源(運算節點), "集群"分配資源以后,

這個 Spark 進程會分解一些計算工作,并把他們放到這些申請來的資源中運行。

</div>

提交給 Spark 執行的工作稱做application(應用),對應的主程序稱作:driver program。

driver program通過一個叫做SparkContext的對象來協調 Spark 集群中不同進程的任務。

</div>

具體來說:

  1. driver program向"集群"申請到得運算節點稱作 worker node;

    </li>

  2. 一旦申請到 worker node,driver program會連接這些 worker node, 并在 worker node 上創建(acquire)執行計算的進程(executor);

    </li>

  3. 接下來driver program將計算需要的代碼和數據發給executor;

    </li>

  4. 最后SparkContext將分解出來的task(任務) 發送給各個executor去執行。

    </li> </ol>

    過程如下圖所示:

    Spark 集群概述

    這里有一些注意點:

    1. 每個application都獲得自己獨立的executor進程,這個executor進程利用多個線程運行多個task。這樣可以保證不同application的隔離性,無論是調度端(driver program分解各自的task),還是執行端(每個executor只跑來自同一個application的task)。不過這也意味著,不同的application之間除非借助外部存儲系統(例如數據庫),否則是不可以共享數據的。

      </li>

    2. Spark 是不需要知道運行在什么樣的 "集群" 上的。Spark 只需要可以創建進程,并且和這些進程通信,無論是運行在什么樣的集群上(eg. Mesos/YARN)都可以。

      </li>

    3. driver program必須在整個生命周期中可以從不同的executor接受連接。因此,driver program對于executor來說,

      必須是網路可及的。

      </div> </li>

    4. 因為由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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
       轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
       本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!