《Spark指南》二假抄、 獨立模式

本文主要翻譯至鏈接且不局限于該文內容,也加入了筆者實踐內容丽猬,翻譯水平有限宿饱,歡迎指正,轉載請注明出處脚祟。

除了運行在Mesos和YARN集群管理模式上谬以,Spark也支持簡單的獨立部署模式。你可以通過手工啟動一個master進程(主管理進程)和若干workers進程(工作者進程)或者使用腳本兩種方式來啟動一個獨立模式的集群由桌。獨立模式允許在其他機器上運行這些鏡像为黎,并進行測試邮丰。

安裝

你可以通過已經構件好的各個發(fā)布版來安裝Spark,也可以按照這個教程自己完成構建铭乾。

筆者下載了spark-2.1.0-bin-hadoop2.7發(fā)布版剪廉,解壓之后的目錄如下:

spark-2.1.0-bin-hadoop2.7發(fā)布版目錄

啟動

你可以通過如下命令啟動一個獨立模式的master服務:

./sbin/start-master.sh

啟動后,master服務會打印出服務地址(后文中使用master-spark-URL來表示這個地址)炕檩,形如spark://HOST:PORT斗蒋,該地址就是workers服務連接的地址,執(zhí)行作業(yè)時傳遞給SparkContext的“master”參數(shù)笛质,也是這個地址泉沾。你還可以通過訪問“http://localhost:8080” (默認,后文中使用master web UI來表示)來查看spark集群的基本情況经瓷,在上面你也可以找到spark master服務的地址爆哑,形如:

Spark master服務的web UI界面

類似地,你也可以通過如下命令來啟動一個或若干個連接到master服務的workers進程(一臺機器只能啟動一個worker進程):

./sbin/start-slave.sh <master-spark-URL>

一旦你啟動了一個worker舆吮,你就可以在master web UI中找到這個進程信息揭朝,還包括這個進程使用的CPU、內存(系統(tǒng)的內存中為操作系統(tǒng)留出了1G)等信息色冀,筆者上文的截圖中潭袱,你就可以看到有一個worker連接到了master服務。
下表列舉了所有可以傳遞給master和worker服務的配置選項:

參數(shù) 含義
-h HOST, --host HOST 監(jiān)聽的主機名
-i HOST, --ip HOST 監(jiān)聽的主機名(已廢棄锋恬,使用-h或--host代替)
-p PORT, --port PORT 服務監(jiān)聽的端口(master服務默認是7077屯换,worker服默認是隨機端口)
--webui-port PORT web UI 服務使用的端口,master服務默認使用8080与学,worker服務默認使用8081
-c CORES, --cores CORES Spark應用程序允許使用的CPU數(shù)量彤悔,默認是所有的CPU,該參數(shù)僅對worker配置有效
-m MEM, --memory MEM Spark應用程序允許使用的內存大小索守,格式形如1000M或2G晕窑,默認情況是機器所有內存減去1G,該參數(shù)僅對worker有效
-d DIR卵佛, --work-dir DIR Spark服務的暫存空間目錄和作業(yè)的logs輸出目錄杨赤,默認是SPARK_HOME/work,該參數(shù)僅對worker有效
--properties-file FILE Spark配置文件加載的文件路徑截汪,默認是conf/spark-defaults.conf

集群執(zhí)行腳本

使用腳本運行一個獨立模式集群前疾牲,需要先創(chuàng)建一個SPARK_HOME/conf/slaves文件,該文件包含你想啟動的所有worker所在的機器配置衙解,每一條一行阳柔。如果conf/slaves文件不存在,spark會默認在本機啟動一個worker進程蚓峦,可以用這個worker來做測試盔沫。注意医咨,master所在的機器使用ssh來訪問其他worker機器。默認情況下架诞,ssh并行訪問worker機器拟淮,并且這些機器需要安裝免密模式(使用私鑰來登錄)。如果你沒有安裝免密模式谴忧,你可以通過設置環(huán)境變量SPARK_SSH_FOREGROUND來連續(xù)提供每個worker的密碼很泊。

一旦你創(chuàng)建和編輯好了slaves文件,你就可以通過下面這些腳本來運行Spark沾谓,這些腳本在SPARK_HOME/sbin目錄中可以找到委造,他們都是基于Hadoop的部署腳本:

  • sbin/start-master.sh - 在該腳本所執(zhí)行的機器上啟動一個master實例
  • sbin/start-slaves.sh - 根據conf/slaves機器的配置,啟動每一個worker實例
  • sbin/start-slave.sh - 在該腳本所執(zhí)行的機器上啟動一個worker實例
  • sbin/start-all.sh - 啟動一個master實例和一系列的worker實例(slaves中配置的實例)
  • sbin/stop-master.sh - 停止master實例
  • sbin/stop-slaves.sh - 以此停止slaves上配置的所有機器上的worker實例
  • sbin/stop-all.sh - 停止master實例和所有worker實例

注意這些腳本都應該在在你想要作為master實例的機器上執(zhí)行均驶,不是你的本機昏兆。

你可以進一步通過在SPARK_HOME/conf/spark-env.sh文件中配置如下這些環(huán)境變量來更改集群的設置,你可以以SPARK_HOME/conf/spark-env.sh.template文件為模板來創(chuàng)建配置文件妇穴,然后拷貝到所有的worker機器以使這些配置生效:

參數(shù) 含義
SPARK_MASTER_HOST 指定master所在的主機名或地址爬虱,必須是一個網絡可達的地址
SPARK_MASTER_PORT 指定master進程的端口,默認是7077腾它,有不同的話必須配置
SPARK_MASTER_WEBUI_PORT 指定master web UI的端口跑筝,默認是8080,有不同的話必須配置
SPARK_MASTER_OPTS master主機的額外配置瞒滴,形如“-Dx=y”曲梗,默認是空,后文會進一步列舉
SPARK_LOCAL_DIRS 指定Spark暫存目錄妓忍,用于存儲在磁盤上的map輸出文件和RDDs虏两,它最好應該是一個本地可以快速訪問的磁盤,可以通過逗號分隔不同磁盤上的多個目錄
SPARK_WORKER_CORES 允許Spark應用程序使用的CPU總數(shù)世剖,默認是所有都可用
SPARK_WORKER_MEMORY 允許Spark應用程序使用的內存總量定罢,例如1000m,2g搁廓,默認是該機器的內存總量減去1G引颈;注意每個Spark應用程序獨立的內存使用spark.executor.memory屬性來配置
SPARK_WORKER_PORT 指定worker啟動的端口耕皮,默認是隨機端口
SPARK_WORKER_WEBUI_PORT 指定worker在web UI中的端口境蜕,默認是8081
SPARK_WORKER_DIR Spark應用程序使用的暫存空間目錄,用于存放日志等凌停,默認是SPARK_HOME/work
SPARK_WORKER_OPTS worker主機的額外配置粱年,形如“-Dx=y”,默認是空罚拟,后文會進一步列舉
SPARK_DAEMON_MEMORY 分配給Spark master和worker鏡像進程自身的內存台诗,默認是1g
SPARK_DAEMON_JAVA_OPTS Spark master和worker鏡像進程使用的JVM配置完箩,默認是空
SPARK_PUBLIC_DNS Spark master和worker機器的公共的DNS主機名,默認是空

注意拉队,上述這些腳本不支持在Windows中執(zhí)行弊知,如果要再Windows系統(tǒng)中使用Spark集群,請手工啟動master和workers粱快。

SPARK_MASTER_OPTS屬性支持如下這些配置:

參數(shù) 默認值 含義
spark.worker.cleanup.enabled false 開啟后將會周期性自動清理worker中的Spark應用程序目錄秩彤,注意該屬性只在獨立模式下有效,YARN使用不同的工作模式事哭,并且只有停止運行的應用程序會被清理
spark.worker.cleanup.interval 1800(30分鐘)) 自動清理的時間周期漫雷,以秒為單位
spark.worker.cleanup.appDataTtl 7243600(7天) 每個worker實例為應用程序工作目錄保留的時間,以s為單位鳍咱,這是一個存留時間降盹,且應該取決于你的磁盤空間可用量。應用程序在執(zhí)行時將會下載所需的jars文件和產生日志谤辜,隨著時間的推移蓄坏,磁盤可能很快會被占滿,特別是當你頻繁提交和執(zhí)行應用程序的時候
spark.worker.ui.compressedLogFileLengthCacheSize 100 (比較費解)每辟,對于壓縮的日志文件剑辫,只能通過解壓縮文件來計算未壓縮文件,Spark緩存了壓縮日志文件的未壓縮文件大小渠欺,本屬性用于控制緩存大小

連接應用程序到集群

在Spark集群上運行一個應用程序妹蔽,只要通過為SparkContext構造器傳遞master實例所在的URL即可,改地址即spark://IP:PORT挠将。

可以通過如下命令來使用可交互的Spark shell環(huán)境控制集群:

./bin/spark-shell --master spark://IP:PORT

上述命令中可以傳遞選項--total-executor-cores <numCores>來控制spark-shell使用的CPU數(shù)胳岂。

運行Spark應用程序

spark-submit腳本提供了一個最直接的方式來提交已編譯的Spark應用程序,對于獨立模式的集群舔稀,Spark目前支持兩種部署模式乳丰。1)使用client模式,則驅動程序運行在該客戶端所在的進程上内贮,2)使用cluster模式产园,則驅動程序運行在集群里的某一個worker進程上,且該客戶端進程在提交應用程序之后就會退出夜郁,不會等等應用程序的執(zhí)行什燕。

如果你的應用程序通過Spark submit提交,該程序運行所需的jars文件都會自動部署到所有worker節(jié)點竞端。對于你的應用程序依賴的其他附加jars文件屎即,都可以通過 --jars 標識引入(多個jars文件使用英文逗號間隔,例如 --jars jar1,jar2)。更改應用程序配置和執(zhí)行環(huán)境的方式技俐,可以參考鏈接乘陪。

此外,獨立cluster模式支持自動重啟應用程序雕擂,如果該程序是以非零值退出啡邑。如果要使用這個特征,你可以在以spark-submit命令啟動你的應用程序時傳遞 --supervice 標記井赌。如果你想殺掉一個重復失敗的應用程序谣拣,你可以執(zhí)行如下指令:

./bin/spark-class org.apache.spark.deploy.Client kill <master url> <driver ID>

其中的dirver ID,你可以在master web UI(地址:http://<master url>:8080)上找到族展。

資源調度

在提交的多個應用程序中森缠,獨立cluster模式目前只支持簡單的FIFO調度方式。然而仪缸,為了允許多個應用程序并發(fā)執(zhí)行贵涵,你可以通過修改每個應用程序使用的最大資源來控制。默認情況下恰画,它將獲得及群里的所有CPU資源宾茂,這意味著一次只能執(zhí)行一個應用程序。你可以在傳遞給SparkContext的SparkConf類實例中覆蓋 spark.cores.max屬性來修改這一限制拴还,例如:

val conf = new SparkConf()
  .setMaster(...)
  .setAppName(...)
  .set("spark.cores.max", "10")
val sc = new SparkContext(conf)

此外跨晴,你還可以配置master服務上的spark.deploy.defaultCores環(huán)境變量來修改默認值,而不用每次都給應用程序傳遞spark.cores.max值片林。在 conf/spark-env.sh文件后追加一行如下配置:

export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=<value>"

監(jiān)控和日志

Spark的獨立模式提供了一個web交互界面來控制集群端盆,master服務和每一個worker都有自己的ui界面以方便查看集群狀態(tài)和作業(yè)的統(tǒng)計。默認情況下费封,可以訪問master主機的8080端口(該端口可以通過前文所述的命令行參數(shù)方式修改)進入該界面焕妙,前文的截圖中可以看到類似的界面。

此外弓摘,作業(yè)運行的日志將會打印在每臺worker機器的工作目錄上(默認是SPARK_HOME/work目錄)焚鹊。你會看到每個作業(yè)有兩個日志文件,stdout和stderr韧献,他們將輸出作業(yè)打印到控制臺的所有信息末患。

與Hadoop一起運行

你可以讓Spark與一個已存在的Hadoop集群一起工作,只要在相同的機器上再啟動單獨的進程锤窑。如果想從Spark訪問Hadoop的數(shù)據璧针,只要使用該數(shù)據在HDFS系統(tǒng)上的地址(正常是形如hdfs://<namenode>:9000,具體的地址你可以在Hadoop Namenode的web界面上找到)果复〕旅В或者渤昌,你可以在獨立的集群上安裝Spark虽抄,然后通過網絡訪問HDFS系統(tǒng)上的數(shù)據走搁,當然這會比上一種方式更慢,因為數(shù)據的傳輸需要經過網絡(如果你是在同一個本地局域網內迈窟,數(shù)據的傳輸速度可能也不會太慢私植,例如你可以將部分Spark機器安裝在與Hadoop同一個機架上,這樣它的副本就可以被快速訪問)车酣。

配置網絡安全

Spark會重度依賴網絡曲稼,而一些環(huán)境對使用嚴格的防火墻設置有著嚴格的要求。你可以在這個鏈接中查看完整的配置湖员。

高可用性

默認情況下贫悄,獨立模式對worker故障具有彈性(Spark自身對無法工作的彈性是通過將它移到其他的worker上)。然而娘摔,這個過程需要使用一個Master服務來進行調度決策窄坦,于是存在一個單點故障的可能:如果Master服務崩潰了,新的應用程序將無法創(chuàng)建凳寺。為了保證可用性鸭津,Spark提供了如下兩種策略:

使用ZooKeeper的備用master

概述

通過利用Zookeeper來提供leader選舉和一些狀態(tài)存儲,你可以在Spark集群內運行多個master服務肠缨,并將它們連接到同一個zookeeper實例逆趋。這些master服務的其中一個將被選舉為“l(fā)eader”提供服務,其他的則作為備用運行晒奕。如果當前的leader掛了闻书,zookeeper會選舉一個新的master服務來充當leader,并應用老master的狀態(tài)脑慧,然后新的master服務將會重新提供調度服務惠窄。整個恢復過程大概花費1到2分鐘,時間從master服務掛了開始算起漾橙。注意杆融,這個延時只會影響新應用程序的調度,在老master掛了期間已經提交執(zhí)行的應用程序不會受到影響霜运。

關于Zookeeper脾歇,可以參考這里

配置

你可以通過設置spark-env中的SPARK_DAEMON_JAVA_OPTS屬性來啟用恢復模式淘捡,方式是修改 spark.deploy.recoveryMode 和相關的spark.deploy.zookeeper.*配置藕各,詳細的配置請參考這里

注意:在多master方式運行下焦除,如果你沒有正確的配置zookeeper屬性激况,他們無法正常恢復工作,因為所有的master都會認為自己是leader乌逐,也會單獨進行調度竭讳,造成錯誤的集群狀態(tài)。

細節(jié)

當你安裝了Zookeeper集群后浙踢,啟用高可用性就變得很簡單绢慢。只要使用相同的Zookeeper配置(包括Zookeeper目錄和URL)來啟動多個master服務。master服務可以隨時添加和移除洛波。

為了調度新的應用程序胰舆,或者添加新的worker,他們得知道當前l(fā)eader的IP地址蹬挤,解決方式是傳遞一個master地址列表而不是只傳一個缚窿,例如,你可以在SparkContext上下文中指定master地址為 spark://host1:port1,host2:port2焰扳。SparkContext會嘗試注冊所有的master滨攻,如果host1掛了,host2也能被正確發(fā)現(xiàn)蓝翰。

“注冊到Master服務”與普通操作之間有個很重要的特性光绕。當應用程序或worker啟動時,他們需要能夠找到和注冊到當前的lead master畜份,一旦成功注冊诞帐,他們就會被存到Zookeeper中,一旦出現(xiàn)故障爆雹,新的leader會聯(lián)系之前注冊的應用程序和workers去更新leader已變更的信息停蕉,而在新的master啟動期間,他們無需知道他的存在钙态。

由于這個特質慧起,新的master可以在任意時間創(chuàng)建,你唯一需要擔心的是當新的應用程序或workers啟動時能夠找到成為leader的master并成功注冊册倒。

使用本地文件系統(tǒng)進行單點恢復

概述

使用zookeeper是生產環(huán)境下保證高可用性的最好方式蚓挤,但是如果你只想重啟一下掛掉的master服務,也可以使用本地的文件系統(tǒng)進行恢復驻子。當注冊應用程序和workers時灿意,他們的狀態(tài)將被記錄到指定的暫存目錄中,使得master重啟時可以通過這些狀態(tài)文件恢復他們的狀態(tài)崇呵。

配置

通過在spark-env中設置SPARK_DAEMON_JAVA_OPTS屬性可以激活這一模式缤剧,相關配置如下:

系統(tǒng)屬性 含義
spark.deploy.recoveryMode 設置為FILESYSTEM可以開啟單機恢復模式,默認不啟用
spark.deploy.recoveryDirectory 該目錄將用來存儲master恢復狀態(tài)

細節(jié)

  • 這個方案可以與一個進行監(jiān)控器例如monit一起工作域慷,也可以只簡單的通過重啟來恢復荒辕。
  • 雖然文件系統(tǒng)恢復模式比不適用任何恢復模式要好汗销,但是在開發(fā)或者實驗環(huán)境下建議不必啟用。使用stop-master.sh腳本停止一個master服務時抵窒,Spark不會清空任何恢復狀態(tài)弛针,因此當重啟一個master服務時,它將進入恢復模式估脆,如果他需要等待所有之前的worker/clients超時,就會顯著的增加系統(tǒng)啟動的時間(接近一分鐘)座云。
  • 雖然不是官方支持疙赠,但是你可以掛在一個NFS(網絡文件系統(tǒng))目錄來作為恢復目錄,如果master掛了朦拖,你可以在一個新的節(jié)點上啟動master圃阳,這樣也可以恢復所有workers和應用程序的狀態(tài)(等價于Zookeeper恢復)。但是新的應用程序必須能夠找到這個新的master璧帝。

相關的文章

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末苏潜,一起剝皮案震驚了整個濱河市银萍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恤左,老刑警劉巖贴唇,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異飞袋,居然都是意外死亡戳气,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門巧鸭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓶您,“玉大人,你說我怎么就攤上這事纲仍±廊颍” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵巷折,是天一觀的道長压鉴。 經常有香客問我,道長锻拘,這世上最難降的妖魔是什么油吭? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任击蹲,我火速辦了婚禮,結果婚禮上婉宰,老公的妹妹穿的比我還像新娘歌豺。我一直安慰自己,他們只是感情好心包,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布类咧。 她就那樣靜靜地躺著,像睡著了一般蟹腾。 火紅的嫁衣襯著肌膚如雪痕惋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天娃殖,我揣著相機與錄音值戳,去河邊找鬼。 笑死炉爆,一個胖子當著我的面吹牛堕虹,可吹牛的內容都是我干的。 我是一名探鬼主播芬首,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼赴捞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了郁稍?” 一聲冷哼從身側響起螟炫,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎艺晴,沒想到半個月后昼钻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡封寞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年然评,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狈究。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡碗淌,死狀恐怖,靈堂內的尸體忽然破棺而出抖锥,到底是詐尸還是另有隱情亿眠,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布磅废,位于F島的核電站纳像,受9級特大地震影響,放射性物質發(fā)生泄漏拯勉。R本人自食惡果不足惜竟趾,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一憔购、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧岔帽,春花似錦玫鸟、人聲如沸犀勒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至舶得,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間九孩,已是汗流浹背梅惯。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鳖枕,地道東北人灭翔。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓煌张,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子霹琼,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內容