Spark on Yarn

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

最近從Hadoop 1.x 轉到Hadoop 2.x 同時將一些java 程序轉為Scala的程序將平臺上的代碼減少了很多,在實施的過程中,開到一些Spark相關的YARN的部署上都是基于之前的Hadoop 1.x的部分方式,在Hadoop2.2 +版本之上 基本上就不用這么部署了。其原因就是Hadoop YARN 統一資源管理。

在Spark官網上

Spark應用在集群上以獨立的進程集合運行,在你的主程序(稱為驅動程序)中以SparkContext對象來調節。 特別的,為了在集群上運行,
SparkContext可以與幾個類型的集群管理器(Spark自身單獨的集群管理器或者Mesos/YARN)相連接,這些集群管理器可以 在應用間分配資源。一旦連接,Spark需要在集群上的線程池子節點,也就是那些執行計算和存儲應用數據的工作進程。然后,它將把你的應用代碼(以JAR 或者Python定義的文件并傳送到SparkContext)發送到線程池。最后,SparkContext發送任務讓線程池運行。(所以是通過 SparkContext發送到其他節點的,在此你只是需要得到SparkContext,就行啦)。
Spark on Yarn
關于這個架構有幾個游泳的地方需要注意:
1.各個應用有自己的線程池進程,會在整個應用的運行過程中保持并在多個線程中運行任務。這樣做的好處是把應用相互孤立,即在調度方面(各個驅 動調度它自己的任務)也在執行方面(不同應用的任務在不同的JVM上運行)。然而,這也意味著若不把數據寫到額外的存儲系統的話,數據就無法在不同的 Spark應用間(SparkContext的實例)共享。
2.對于潛在的集群管理器來說,Spark是不可知的。只要它需要線程池的進程和他們間的通信,那么即使是在也支持其他應用的集群管理器(例如,Mesos/YARN)上運行也相對簡單。
3. 因為驅動在集群上調度任務,它應該運行接近到工作節點,在相同的局域網內更好。如果你想對遠程的集群發送請求,較好的選擇是為驅動打開一個RPC,讓它就近提交操作而不是運行離工作節點很遠的驅動。
集群管理類型
系統目前支持3中集群管理:
(1)單例模式 一種簡單的集群管理,其包括一個很容易搭建集群的Spark
(2) Apache Mesos模式 一種通用的集群管理,可以運行Hadoop MapReduce和服務應用的模式
(3) Hadoop YARN模式 Hadoop 2.0 中的資源管理模式
其實,在Amazon EC2(亞馬遜彈性計算云)中Spark的EC2啟動腳本可以很容易的啟動單例模式。
給集群發布代碼
給集群發布代碼的一種推薦的方式是通過SparkContext的構造器,這個構造器可以給工作節點生成JAR文件列表 (Java/Scala)或者.egg文件和.zip包文件(Python)。你也可以執行SparkContext.addJar和addFile來動 態的創建發送文件。
監控器
每個驅動程序有一個Web UI,典型的是在4040端口,你可以看到有關運行的任務,程序和存儲空間大小等信息。你可以在瀏覽器中輸入簡單的URL方式來訪 問:http://<驅動節點>::4040.監控器也可以指導描述其它監控信息。(如果你使用的Spark YARN 模式的,只有運行Spark才能看到UI頁面,你停止了,log數據就沒了,但你可以將log持久化)。
任務調度
Spark可以通過在應用外(集群管理水平)和應用里(如果在同一個SparkContext中有多個計算指令)資源分配。

來自:http://www.cnblogs.com/sunwubin/p/4214410.html
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!