來源: http://spark.apache.org/docs/1.6.0/cluster-overview.html
下面是對上述來源中Spark官方文檔的中文翻譯
本文簡要概述Spark如何在集群上運(yùn)行遭居,以便更容易地了解所涉及的組件拼卵。閱讀應(yīng)用程序提交指南(application submission guide ),了解在群集上啟動(dòng)應(yīng)用程序惠啄。
組件
Spark應(yīng)用程序作為一組進(jìn)程獨(dú)立的在集群上運(yùn)行,由主程序中的SparkContext對象(稱為驅(qū)動(dòng)程序)協(xié)調(diào)合敦。
具體來說牲迫,要在集群上運(yùn)行,SparkContext可以連接到幾種類型的集群管理器(Spark自己的獨(dú)立集群管理器衡楞,Mesos或YARN)吱雏,它們可以跨應(yīng)用程序分配資源。 連接后瘾境,Spark會(huì)在集群中的節(jié)點(diǎn)上獲取執(zhí)行程序歧杏,這些進(jìn)程是為應(yīng)用程序運(yùn)行計(jì)算和存儲(chǔ)數(shù)據(jù)的進(jìn)程。 接下來迷守,它將應(yīng)用程序代碼(由JAR或Python文件定義傳遞給SparkContext)發(fā)送給執(zhí)行者犬绒。 最后,SparkContext將任務(wù)發(fā)送給執(zhí)行器來運(yùn)行兑凿。
這個(gè)架構(gòu)有幾個(gè)有用的事情需要注意:
每個(gè)應(yīng)用程序都有自己的執(zhí)行進(jìn)程凯力,它們在整個(gè)應(yīng)用程序的運(yùn)行時(shí)間內(nèi)一直存在,并且持續(xù)運(yùn)行礼华,還在多個(gè)線程中運(yùn)行任務(wù)咐鹤。這有利于在調(diào)度端(每個(gè)驅(qū)動(dòng)程序調(diào)度其自己的任務(wù))和執(zhí)行器端(來自不同應(yīng)用程序的任務(wù)在不同的JVM中運(yùn)行)將應(yīng)用程序彼此隔離。但是圣絮,這也意味著數(shù)據(jù)不能在不將其寫入外部存儲(chǔ)系統(tǒng)的情況下跨不同的Spark應(yīng)用程序(SparkContext實(shí)例)共享祈惶。
Spark對底層集群管理器是不可知的。只要它可以獲得執(zhí)行器進(jìn)程,并且這些進(jìn)程彼此通信捧请,它也能夠相對容易的在其他集群管理器上運(yùn)行凡涩,即使這個(gè)集群管理器支持其他應(yīng)用程序(例如Mesos / YARN)。
驅(qū)動(dòng)程序必須在其生命周期內(nèi)偵聽并接受來自其執(zhí)行器的傳入連接(例如疹蛉,請參閱 spark.driver.port and spark.fileserver.port in the network config section)活箕。因此,驅(qū)動(dòng)程序必須是工作節(jié)點(diǎn)的網(wǎng)絡(luò)可可找到的氧吐。
因?yàn)轵?qū)動(dòng)程序在群集上調(diào)度任務(wù)讹蘑,所以它應(yīng)該靠近工作節(jié)點(diǎn)運(yùn)行,最好在同一個(gè)局域網(wǎng)上運(yùn)行筑舅。如果你想遠(yuǎn)程發(fā)送請求到集群座慰,最好打開一個(gè)RPC給驅(qū)動(dòng)程序,并讓它從附近提交操作翠拣,這比遠(yuǎn)離工作節(jié)點(diǎn)要好版仔。
集群管理器類型
系統(tǒng)目前支持三個(gè)集群管理器:
- Standalone - 包含在Spark中的簡單集群管理器,可以輕松設(shè)置集群误墓。
- Apache Mesos - 一個(gè)通用集群管理器蛮粮,也可以運(yùn)行Hadoop MapReduce和服務(wù)應(yīng)用程序。
- Hadoop YARN - Hadoop 2中的資源管理器谜慌。
下表總結(jié)了您將看到的用于引用群集概念的術(shù)語:
|術(shù)語 |含義
|------------------
|Application | 用戶基于Spark構(gòu)建的程序然想。由集群上的* driver program 和 executors組成。
|Application jar|包含用戶的Spark應(yīng)用程序的jar欣范。在某些情況下变泄,用戶需要?jiǎng)?chuàng)建一個(gè)包含其應(yīng)用程序及其依賴關(guān)系的“uber jar”。用戶的jar不應(yīng)包括Hadoop或Spark庫恼琼,但是妨蛹,這些將在運(yùn)行時(shí)添加。
|Driver program|運(yùn)行應(yīng)用程序的main()函數(shù)并創(chuàng)建SparkContext的進(jìn)程
|Cluster manager|用于獲取集群上資源的外部服務(wù)(例如獨(dú)立管理器晴竞,Mesos蛙卤,YARN)
|Deploy mode|區(qū)分驅(qū)動(dòng)程序進(jìn)程運(yùn)行的位置。在“集群”模式下噩死,框架會(huì)啟動(dòng)集群中的驅(qū)動(dòng)程序颤难。在“客戶端”模式下,提交器在集群外啟動(dòng)驅(qū)動(dòng)程序甜滨。
|Worker node|任何可以在集群中運(yùn)行應(yīng)用程序代碼的節(jié)點(diǎn)
|Executor|為工作節(jié)點(diǎn)上的應(yīng)用程序啟動(dòng)的進(jìn)程乐严,它運(yùn)行任務(wù)并在內(nèi)存或磁盤存儲(chǔ)中保存數(shù)據(jù)。每個(gè)應(yīng)用程序都有自己的executors衣摩。
|Task|將發(fā)送給一個(gè)executor的工作單元
|Job|由多個(gè)任務(wù)組成的并行計(jì)算,它們響應(yīng)Spark動(dòng)作(例如:save,collect)而生成;可以在驅(qū)動(dòng)程序日志中看到此術(shù)語艾扮。
|Stage|每個(gè)作業(yè)被分成更小的任務(wù)集既琴,稱為彼此依賴的 stages *(類似于MapReduce中的map和reduce階段);可以在驅(qū)動(dòng)程序日志中看到此術(shù)語。