免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
理解Spark運(yùn)行模式(二)(Yarn Cluster)

上一篇說(shuō)到Spark的yarn client運(yùn)行模式,它與yarn cluster模式的主要區(qū)別就是前者Driver是運(yùn)行在客戶端,后者Driver是運(yùn)行在yarn集群中。yarn client模式一般用在交互式場(chǎng)景中,比如spark shell, spark sql等程序,但是該模式下運(yùn)行在客戶端的Driver與Yarn集群有大量的網(wǎng)絡(luò)交互,如果客戶端與集群之間的網(wǎng)絡(luò)不是很好,可能會(huì)導(dǎo)致性能問(wèn)題。因此一般在生產(chǎn)環(huán)境中,大部分還是采用yarn cluster模式運(yùn)行spark程序。

下面具體還是用計(jì)算PI的程序來(lái)說(shuō)明,examples中該程序有三個(gè)版本,分別采用Scala、Python和Java語(yǔ)言編寫(xiě)。本次用Python程序pi.py做說(shuō)明。

 1 from __future__ import print_function 2  3 import sys 4 from random import random 5 from operator import add 6  7 from pyspark.sql import SparkSession 8  9 10 if __name__ == "__main__":11     """12         Usage: pi [partitions]13     """14     spark = SparkSession15         .builder16         .appName("PythonPi")17         .getOrCreate()18 19     partitions = int(sys.argv[1]) if len(sys.argv) > 1 else 220     n = 100000 * partitions21 22     def f(_):23         x = random() * 2 - 124         y = random() * 2 - 125         return 1 if x ** 2 + y ** 2 <= 1 else 026 27     count = spark.sparkContext.parallelize(range(1, n + 1), partitions).map(f).reduce(add)28     print("Pi is roughly %f" % (4.0 * count / n))29 30     spark.stop()

程序邏輯與上一篇Scala程序一樣,就不再多做說(shuō)明了。

下面來(lái)以yarn cluster方式來(lái)執(zhí)行這個(gè)程序,注意執(zhí)行程序前先要啟動(dòng)hdfs和yarn,最好同時(shí)啟動(dòng)spark的history server,這樣即使在程序運(yùn)行完以后也可以從Web UI中查看到程序運(yùn)行情況。

輸入以下命令:

[root@BruceCentOS4 ~]# $SPARK_HOME/bin/spark-submit --master yarn --deploy-mode cluster $SPARK_HOME/examples/src/main/python/pi.py

以下是程序運(yùn)行輸出信息部分截圖,

開(kāi)始部分:

  中間部分:

  結(jié)束部分:

 

由于程序是以yarn cluster方式運(yùn)行的,因此Driver是運(yùn)行在Yarn集群當(dāng)中(在BruceCentOS3上的ApplicationMaster進(jìn)程當(dāng)中),同時(shí)在BruceCentOS和BruceCentOS2上各運(yùn)行了1個(gè)Executor進(jìn)程(進(jìn)程名字:CoarseGrainedExecutorBackend),而B(niǎo)ruceCentOS4上的SparkSubmit進(jìn)程僅僅作為yarn client向yarn集群提交spark程序。作為對(duì)比,在yarn client模式當(dāng)中,客戶端SparkSubmit進(jìn)程不僅作為yarn client提交程序,而且同時(shí)還會(huì)運(yùn)行Driver,并啟動(dòng)SparkContext,并且向Executor分配和管理Task,最后收集運(yùn)行結(jié)果,因此yarn client模式程序輸出信息會(huì)顯示最終的打印結(jié)果。然而在yarn cluster模式當(dāng)中,由于Driver運(yùn)行在yarn集群的ApplicationMaster中,因此最終結(jié)果需要到ApplicationMaster進(jìn)程的日志中取查看。可以通過(guò)如下命令查看。

 

SparkUI上的Executor信息:

  BruceCentOS4上的客戶端進(jìn)程:

  BruceCentOS3上的ApplicationMaster進(jìn)程(包含Spark Driver):

 

  BruceCentOS上的Executor:

  BruceCentOS2上的Executor:

 

下面具體描述下Spark程序在yarn cluster模式下運(yùn)行的具體流程。

這里是一個(gè)流程圖:

 

 

  • Spark Yarn Client向YARN提交應(yīng)用程序,類(lèi)似于MapReduce向Yarn提交程序,會(huì)將程序文件、庫(kù)文件和配置文件等上傳到HDFS。
  • ResourceManager收到請(qǐng)求后,在集群中選擇一個(gè)NodeManager,為該應(yīng)用程序分配第一個(gè)Container,要求它在這個(gè)Container中啟動(dòng)應(yīng)用程序的ApplicationMaster,其中ApplicationMaster中會(huì)運(yùn)行Spark Driver,并進(jìn)行SparkContext的初始化。
  • ApplicationMaster向ResourceManager注冊(cè),這樣用戶可以直接通過(guò)ResourceManager查看應(yīng)用程序的運(yùn)行狀態(tài),然后它將采用輪詢的方式通過(guò)RPC協(xié)議為各個(gè)任務(wù)申請(qǐng)資源,并監(jiān)控它們的運(yùn)行狀態(tài)直到運(yùn)行結(jié)束。
  • 一旦ApplicationMaster申請(qǐng)到資源(也就是Container)后,便與對(duì)應(yīng)的NodeManager通信,要求它在獲得的Container中啟動(dòng)CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend啟動(dòng)后會(huì)向ApplicationMaster中的SparkContext注冊(cè)并申請(qǐng)Task。這一點(diǎn)和Standalone模式一樣,只不過(guò)SparkContext在Spark Application中初始化時(shí),使用CoarseGrainedSchedulerBackend配合YarnClusterScheduler進(jìn)行任務(wù)的調(diào)度。
  • ApplicationMaster中的SparkContext分配Task給CoarseGrainedExecutorBackend執(zhí)行,CoarseGrainedExecutorBackend運(yùn)行Task并向ApplicationMaster匯報(bào)運(yùn)行的狀態(tài)和進(jìn)度,以讓ApplicationMaster隨時(shí)掌握各個(gè)任務(wù)的運(yùn)行狀態(tài),從而可以在任務(wù)失敗時(shí)重新啟動(dòng)任務(wù)。
  • 應(yīng)用程序運(yùn)行完成后,ApplicationMaster向ResourceManager申請(qǐng)注銷(xiāo)并關(guān)閉自己。

 以上就是個(gè)人對(duì)Spark運(yùn)行模式(yarn cluster)的一點(diǎn)理解,其中參考了“求知若渴 虛心若愚”博主的“Spark(一): 基本架構(gòu)及原理”的部分內(nèi)容(其中基于Spark2.3.0對(duì)某些細(xì)節(jié)進(jìn)行了修正),在此表示感謝。

 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
理解Spark運(yùn)行模式(一)(Yarn Client)
理解Spark運(yùn)行模式(三)(STANDALONE和Local)
大數(shù)據(jù)基礎(chǔ):Spark工作原理及基礎(chǔ)概念
大數(shù)據(jù)IMF傳奇行動(dòng)絕密課程第13課:Spark內(nèi)核架構(gòu)解密
Spark on Yarn遇到的幾個(gè)問(wèn)題
Apache Spark源碼走讀之8
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服