spark集群部署

1. spark三種分布式部署模式

Spark支持的主要的三種分布式部署方式分別是standalone、spark on mesos和 spark on YARN羹唠。standalone模式,即獨(dú)立模式方咆,自帶完整的服務(wù)娃圆,可單獨(dú)部署到一個(gè)集群中,無需依賴任何其他資源管理系統(tǒng)滓走。它是Spark實(shí)現(xiàn)的資源調(diào)度框架,其主要的節(jié)點(diǎn)有Client節(jié)點(diǎn)帽馋、Master節(jié)點(diǎn)和Worker節(jié)點(diǎn)搅方。而yarn是統(tǒng)一的資源管理機(jī)制,在上面可以運(yùn)行多套計(jì)算框架绽族,如map reduce姨涡、storm等根據(jù)driver在集群中的位置不同,分為yarn client和yarn cluster吧慢。而mesos是一個(gè)更強(qiáng)大的分布式資源管理框架涛漂,它允許多種不同的框架部署在其上,包括yarn检诗。

1.1 standalone框架

Standalone模式下匈仗,集群啟動時(shí)包括Master與Worker,其中Master負(fù)責(zé)接收客戶端提交的作業(yè)逢慌,管理Worker悠轩。根據(jù)作業(yè)提交的方式不同,分為driver on client 和drvier on worker涕癣。如下圖7所示哗蜈,上圖為driver on work模式,下圖為driver on client模式坠韩。兩種模式的主要不同點(diǎn)在于driver所在的位置距潘。


圖7 standalone模式

由于standalone模式較簡單,這里不再詳述只搁。

1.2 yarn集群模式

Apache yarn是apache Hadoop開源項(xiàng)目的一部分音比。設(shè)計(jì)之初是為了解決mapreduce計(jì)算框架資源管理的問題。到haodoop 2.0使用yarn將mapreduce的分布式計(jì)算和資源管理區(qū)分開來氢惋。它的引入使得Hadoop分布式計(jì)算系統(tǒng)進(jìn)入了平臺化時(shí)代洞翩,即各種計(jì)算框架可以運(yùn)行在一個(gè)集群中,由資源管理系統(tǒng)YRAN進(jìn)行統(tǒng)一的管理和調(diào)度焰望,從而共享整個(gè)集群資源骚亿、提高資源利用率。
  YARN總體上也Master/slave架構(gòu)——ResourceManager/NodeManager熊赖。前者(RM)負(fù)責(zé)對各個(gè)NodeManager(NM)上的資源進(jìn)行統(tǒng)一管理和調(diào)度来屠。而container是資源分配和調(diào)度的基本單位,其中封裝了機(jī)器資源震鹉,如內(nèi)存俱笛、CPU、磁盤和網(wǎng)絡(luò)等传趾,每個(gè)任務(wù)會被分配一個(gè)Container迎膜,該任務(wù)只能在該Container中執(zhí)行,并使用該Container封裝的資源浆兰。NodeManager的作用則是負(fù)責(zé)接收并啟動應(yīng)用的container磕仅、而向RM回報(bào)本節(jié)點(diǎn)上的應(yīng)用Container運(yùn)行狀態(tài)和資源使用情況。ApplicationMaster與具體的Application相關(guān)镊讼,主要負(fù)責(zé)同ResourceManager協(xié)商以獲取合適的Container宽涌,并跟蹤這些Container的狀態(tài)和監(jiān)控其進(jìn)度。如下圖8所示為yarn集群的一般模型蝶棋。


圖8 yarn集群一般部署

  Spark在yarn集群上的部署方式分為兩種卸亮,yarn client(driver運(yùn)行在客戶端)和yarn cluster(driver運(yùn)行在master上),driver on master如下圖9所示玩裙。


圖9 yarn cluster部署圖
  • (1) Spark Yarn Client向YARN中提交應(yīng)用程序兼贸,包括Application Master程序、啟動Application Master的命令吃溅、需要在Executor中運(yùn)行的程序等溶诞;
  • (2) Resource manager收到請求后,在其中一個(gè)node manager中為應(yīng)用程序分配一個(gè)container决侈,要求它在container中啟動應(yīng)用程序的Application Master螺垢,Application master初始化sparkContext以及創(chuàng)建DAG Scheduler和Task Scheduler。
  • (3) Application master根據(jù)sparkContext中的配置,向resource manager申請container枉圃,同時(shí)功茴,Application master向Resource manager注冊,這樣用戶可通過Resource manager查看應(yīng)用程序的運(yùn)行狀態(tài)
  • (4) Resource manager 在集群中尋找符合條件的node manager孽亲,在node manager啟動container坎穿,要求container啟動executor,
  • (5) Executor啟動后向Application master注冊返劲,并接收Application master分配的task
  • (6) 應(yīng)用程序運(yùn)行完成后玲昧,Application Master向Resource Manager申請注銷并關(guān)閉自己。
    Driver on client如下圖10所示:


    圖10 yarn client部署圖
  • (1) Spark Yarn Client向YARN的Resource Manager申請啟動Application Master篮绿。同時(shí)在SparkContent初始化中將創(chuàng)建DAG Scheduler和TASK Scheduler等
  • (2) ResourceManager收到請求后孵延,在集群中選擇一個(gè)NodeManager,為該應(yīng)用程序分配第一個(gè)Container亲配,要求它在這個(gè)Container中啟動應(yīng)用程序的ApplicationMaster隙袁,與YARN-Cluster區(qū)別的是在該ApplicationMaster不運(yùn)行SparkContext,只與SparkContext進(jìn)行聯(lián)系進(jìn)行資源的分派
  • (3) Client中的SparkContext初始化完畢后弃榨,與Application Master建立通訊菩收,向Resource Manager注冊,根據(jù)任務(wù)信息向Resource Manager申請資源(Container)
  • (4) 當(dāng)application master申請到資源后鲸睛,便與node manager通信娜饵,要求它啟動container
  • (5) Container啟動后向driver中的sparkContext注冊,并申請task
  • (6) 應(yīng)用程序運(yùn)行完成后官辈,Client的SparkContext向ResourceManager申請注銷并關(guān)閉自己箱舞。
      從下圖11:Yarn-client和Yarn cluster模式對比可以看出,在Yarn-client(Driver on client)中拳亿,Application Master僅僅從Yarn中申請資源給Executor晴股,之后client會跟container通信進(jìn)行作業(yè)的調(diào)度。如果client離集群距離較遠(yuǎn)肺魁,建議不要采用此方式电湘,不過此方式有利于交互式的作業(yè)。


    圖11 Yarn-client和Yarn cluster模式對比

    \

1.3 mesos集群模式

Mesos是apache下的開源分布式資源管理框架鹅经。起源于加州大學(xué)伯克利分校寂呛,后被twitter推廣使用。Mesos上可以部署多種分布式框架瘾晃,Mesos的架構(gòu)圖如下圖12所示贷痪,其中Framework是指外部的計(jì)算框架,如Hadoop蹦误,Mesos等劫拢,這些計(jì)算框架可通過注冊的方式接入mesos肉津,以便mesos進(jìn)行統(tǒng)一管理和資源分配。


圖12 mesos一般部署圖

  在 Mesos 上運(yùn)行的 framework 由兩部分組成:一個(gè)是 scheduler 舱沧,通過注冊到master 來獲取集群資源阀圾。另一個(gè)是在 slave 節(jié)點(diǎn)上運(yùn)行的executor進(jìn)程,它可以執(zhí)行 framework 的 task 狗唉。 Master 決定為每個(gè)framework 提供多少資源,framework 的 scheduler來選擇其中提供的資源涡真。當(dāng) framework同意了提供的資源分俯,它通過master將 task發(fā)送到提供資源的slaves 上運(yùn)行。Mesos的資源分配圖如下圖13哆料。


圖13 mesos資源分配圖
  • (1) Slave1 向 Master 報(bào)告缸剪,有4個(gè)CPU和4 GB內(nèi)存可用
  • (2) Master 發(fā)送一個(gè) Resource Offer 給 Framework1 來描述 Slave1 有多少可用資源
  • (3) FrameWork1 中的 FW Scheduler會答復(fù) Master,我有兩個(gè) Task 需要運(yùn)行在 Slave1东亦,一個(gè) Task 需要<2個(gè)CPU杏节,1 GB內(nèi)存="">,另外一個(gè)Task需要<1個(gè)CPU典阵,2 GB內(nèi)存="">
  • (4) 最后奋渔,Master 發(fā)送這些 Tasks 給 Slave1。然后壮啊,Slave1還有1個(gè)CPU和1 GB內(nèi)存沒有使用嫉鲸,所以分配模塊可以把這些資源提供給 Framework2
      Spark可作為其中一個(gè)分布式框架部署在mesos上,部署圖與mesos的一般框架部署圖類似歹啼,如下圖14玄渗,這里不再重述。


    圖14 spark on mesos部署圖

1.4 spark 三種部署模式的區(qū)別

在這三種部署模式中狸眼,standalone作為spark自帶的分布式部署模式藤树,是最簡單也是最基本的spark應(yīng)用程序部署模式,這里就不再贅述拓萌。這里就講一下yarn和mesos的區(qū)別:

  • (1) 就兩種框架本身而言岁钓,mesos上可部署yarn框架。而yarn是更通用的一種部署框架微王,而且技術(shù)較成熟甜紫。
  • (2) mesos雙層調(diào)度機(jī)制,能支持多種調(diào)度模式骂远,而Yarn通過Resource Mananger管理集群資源囚霸,只能使用一種調(diào)度模式。Mesos 的雙層調(diào)度機(jī)制為:mesos可接入如yarn一般的分布式部署框架激才,但Mesos要求可接入的框架必須有一個(gè)調(diào)度器模塊拓型,該調(diào)度器負(fù)責(zé)框架內(nèi)部的任務(wù)調(diào)度额嘿。當(dāng)一個(gè)framework想要接入mesos時(shí),需要修改自己的調(diào)度器劣挫,以便向mesos注冊册养,并獲取mesos分配給自己的資源, 這樣再由自己的調(diào)度器將這些資源分配給框架中的任務(wù)压固,也就是說球拦,整個(gè)mesos系統(tǒng)采用了雙層調(diào)度框架:第一層,由mesos將資源分配給框架帐我;第二層坎炼,框架自己的調(diào)度器將資源分配給自己內(nèi)部的任務(wù)。
  • (3) mesos可實(shí)現(xiàn)粗拦键、細(xì)粒度資源調(diào)度谣光,可動態(tài)分配資源,而Yarn只能實(shí)現(xiàn)靜態(tài)資源分配芬为。其中粗粒度和細(xì)粒度調(diào)度定義如下:
      粗粒度模式(Coarse-grained Mode):程序運(yùn)行之前就要把所需要的各種資源(每個(gè)executor占用多少資源萄金,內(nèi)部可運(yùn)行多少個(gè)executor)申請好,運(yùn)行過程中不能改變媚朦。
      細(xì)粒度模式(Fine-grained Mode):為了防止資源浪費(fèi)氧敢,對資源進(jìn)行按需分配。與粗粒度模式一樣询张,應(yīng)用程序啟動時(shí)福稳,先會啟動executor,但每個(gè)executor占用資源僅僅是自己運(yùn)行所需的資源瑞侮,不需要考慮將來要運(yùn)行的任務(wù)的圆,之后,mesos會為每個(gè)executor動態(tài)分配資源半火,每分配一些越妈,便可以運(yùn)行一個(gè)新任務(wù),單個(gè)Task運(yùn)行完之后可以馬上釋放對應(yīng)的資源钮糖。每個(gè)Task會匯報(bào)狀態(tài)給Mesos slave和Mesos Master梅掠,便于更加細(xì)粒度管理和容錯(cuò),這種調(diào)度模式類似于MapReduce調(diào)度模式店归,每個(gè)Task完全獨(dú)立阎抒,優(yōu)點(diǎn)是便于資源控制和隔離,但缺點(diǎn)也很明顯消痛,短作業(yè)運(yùn)行延遲大且叁。
      從yarn和mesos的區(qū)別可看出,它們各自有優(yōu)缺點(diǎn)秩伞。因此實(shí)際使用中逞带,選擇哪種框架欺矫,要根據(jù)本公司的實(shí)際需要而定,可考慮現(xiàn)有的大數(shù)據(jù)生態(tài)環(huán)境展氓。如我司采用yarn部署spark穆趴,原因是,我司早已有較成熟的hadoop的框架遇汞,考慮到使用的方便性未妹,采用了yarn模式的部署。

2. spark在CDH上的部署過程

CDH的全稱Cloudera’s Distribution Including Apache Hadoop空入,是cloudera公司的發(fā)行版络它。下面我們簡要介紹下在CDH集群上部署spark的過程。

2.1 安裝對應(yīng)版本的scala

  1. 將下載好的scala.tar.gz解壓到/usr/local/scala执庐,可自己指定解壓路徑。
  2. 在/etc/profile中添加SCALA_HOME导梆,并添加到PATH路徑轨淌。
  3. 運(yùn)行scala -version查看已安裝的scala版本。

2.2 安裝Spark

  1. 將spark的壓縮包解壓到自己的指定目錄看尼,如/opt/spark递鹉。
  2. 在/etc/profile中添加SPARK_HOME,并添加到PATH路徑藏斩。
  3. 在/etc/profile中添加HDFS_HOME躏结,并添加到PATH路徑,利用cm自動安裝的CDH機(jī)器狰域,hadoop路徑一般在/opt/cloudera/parcels/CDH/lib/hadoop媳拴。
  4. 在/etc/profile中添加HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop(指明hadoop的配置文件地址)。
  5. 將$HADOOP_HOME/etc/hadoop下的hdfs配置文件hdfs-site.xml拷貝一份到spark的conf目錄下兆览。由于spark要與HDFS協(xié)作屈溉,所以要告知hadoop的配置信息。
  6. 配置spark/conf下的slaves文件抬探,將各節(jié)點(diǎn)的主機(jī)名添加進(jìn)去子巾,以告訴spark該集群有哪些節(jié)點(diǎn)。如:spark-master小压、spark-slave1线梗、spark-slave2.
  7. 配置spark/conf下的spark-env.sh,在底部添加:

export JAVA_HOME=/usr/local/java/jdk1.8.0_65
export SCALA_HOME=/usr/local/scala/scala-2.11.7
export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop
HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
SPARK_MASTER_HOST=10.202.8.114
SPARK_DRIVER_MEMORY=1G

  1. 運(yùn)行sbin/start-all.sh啟動怠益,如果能進(jìn)入master:8088則搭建成功仪搔。
  2. spark-submit提交Pi程序到集群測試,提交腳本如下:

sudo -u hdfs /opt/spark/spark-2.0.0/bin/spark-submit
--class org.apache.spark.examples.SparkPi
--master yarn
--deploy-mode cluster
--executor-memory 512m
--num-executors 3
--driver-java-options "-XX:PermSize=512M -XX:MaxPermSize=1024m"
/opt/spark/spark-2.0.0/examples/jars/spark-examples_2.11-2.0.0.jar &

提交成功后蜻牢,可以在CDH管理界面僻造。進(jìn)入yarn的“應(yīng)用程序”查看運(yùn)行信息憋他。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市髓削,隨后出現(xiàn)的幾起案子竹挡,更是在濱河造成了極大的恐慌,老刑警劉巖立膛,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揪罕,死亡現(xiàn)場離奇詭異,居然都是意外死亡宝泵,警方通過查閱死者的電腦和手機(jī)好啰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來儿奶,“玉大人框往,你說我怎么就攤上這事〈成樱” “怎么了椰弊?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瓤鼻。 經(jīng)常有香客問我秉版,道長,這世上最難降的妖魔是什么茬祷? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任清焕,我火速辦了婚禮,結(jié)果婚禮上祭犯,老公的妹妹穿的比我還像新娘秸妥。我一直安慰自己,他們只是感情好沃粗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布筛峭。 她就那樣靜靜地躺著,像睡著了一般陪每。 火紅的嫁衣襯著肌膚如雪影晓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天檩禾,我揣著相機(jī)與錄音挂签,去河邊找鬼。 笑死盼产,一個(gè)胖子當(dāng)著我的面吹牛饵婆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播戏售,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼侨核,長吁一口氣:“原來是場噩夢啊……” “哼草穆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起搓译,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤悲柱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后些己,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體豌鸡,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年段标,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涯冠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逼庞,死狀恐怖蛇更,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赛糟,我是刑警寧澤派任,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站虑灰,受9級特大地震影響吨瞎,放射性物質(zhì)發(fā)生泄漏痹兜。R本人自食惡果不足惜穆咐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望字旭。 院中可真熱鬧对湃,春花似錦、人聲如沸遗淳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屈暗。三九已至拆讯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間养叛,已是汗流浹背种呐。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弃甥,地道東北人爽室。 一個(gè)月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像淆攻,于是被迫代替她去往敵國和親阔墩。 傳聞我的和親對象是個(gè)殘疾皇子嘿架,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容