日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

监控Spark应用方法简介

發(fā)布時(shí)間:2025/6/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 监控Spark应用方法简介 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

監(jiān)控Spark應(yīng)用有很多種方法。

Web接口
每一個(gè)SparkContext啟動(dòng)一個(gè)web UI用來(lái)展示應(yīng)用相關(guān)的一些非常有用的信息,默認(rèn)在4040端口。這些信息包括:

任務(wù)和調(diào)度狀態(tài)的列表
RDD大小和內(nèi)存使用的統(tǒng)計(jì)信息
正在運(yùn)行的executor的信息
環(huán)境信息
你可以在瀏覽器中打開(kāi)http://<driver-node>:4040網(wǎng)址來(lái)訪問(wèn)這些信息。如果在同一臺(tái)機(jī)器上有多個(gè)SparkContext正在運(yùn)行,那么他們的端口從4040開(kāi)始依次增加(4041,4042等)。

Spark在單機(jī)模式下也提供了web UI。

注意,在所有這些web接口可以通過(guò)點(diǎn)擊“表頭”來(lái)對(duì)這些表格進(jìn)行排序。這使得鑒別運(yùn)行速度慢的任務(wù)、判別數(shù)據(jù)傾斜等非常容易。

Metrics
Spark基于Coda Hale Metrics庫(kù)提供一個(gè)可配置的統(tǒng)計(jì)系統(tǒng)。這允許用戶向不同的終端發(fā)送統(tǒng)計(jì)信息,包括HTTP、JMX和CSV文件。統(tǒng)計(jì)系統(tǒng)可以通過(guò)配置文件來(lái)進(jìn)行配置,Spark默認(rèn)將配置文件保存在$SPARK_HOME/conf/mertics.conf。用戶可以通過(guò)Java property spark.metrics.conf來(lái)修改配置文件的保存路徑。Spark根據(jù)組件的不同將統(tǒng)計(jì)信息分為多個(gè)實(shí)例??梢耘渲妹恳粋€(gè)實(shí)例向多個(gè)方向發(fā)送統(tǒng)計(jì)信息。目前支持下面幾種實(shí)例:

master:Spark管理進(jìn)程
applications:位于master的組件,統(tǒng)計(jì)發(fā)送各種應(yīng)用的信息
worker:Spark工作進(jìn)程
executor:執(zhí)行器
driver:Spark驅(qū)動(dòng)程序
每一個(gè)實(shí)例可以向多個(gè)渠道發(fā)送統(tǒng)計(jì)信息。渠道包含在包org.apache.spark.metrics.sink:

ConsoleSink:將統(tǒng)計(jì)信息發(fā)送到控制臺(tái)
CSVSink:每隔一段時(shí)間將統(tǒng)計(jì)信息寫(xiě)入到CSV文件
GangliaSink:將統(tǒng)計(jì)信息發(fā)送到Ganglia或者多播組
JmxSink:將統(tǒng)計(jì)信息注冊(cè)到JMX控制臺(tái)
MetricsServlet:在Spark UI中添加servlet用來(lái)以JSON的方式提供統(tǒng)計(jì)信息
統(tǒng)計(jì)信息配置文件的語(yǔ)法有一個(gè)示例文件——$SPARK_HOME/conf/metrics.conf.template.

外部工具
有幾個(gè)外部工具可用來(lái)衡量Spark作業(yè)的性能:

集群范圍的監(jiān)控工具,比如 Ganglia,可以洞察整個(gè)集群的利用率和資源瓶頸。例如,Ganglia儀表盤(pán)可以迅速揭示出某個(gè)特定載荷是磁盤(pán)相關(guān),網(wǎng)絡(luò)相關(guān),還是CPU相關(guān)的。
OS性能分析工具,比如 dstat, iostat,和 iotop, 可以提供各個(gè)節(jié)點(diǎn)的細(xì)粒度的分析。
JVM工具,比如 jstack提供了堆棧跟蹤,jmap提供了創(chuàng)建堆轉(zhuǎn)儲(chǔ),jstat提供了時(shí)間序列統(tǒng)計(jì)報(bào)告,還有jconsole提供了各種JVM屬性的視覺(jué)顯示,它們對(duì)JVM內(nèi)部構(gòu)件的舒適運(yùn)作都是非常有用的。

?

討論Spark的配置監(jiān)控和性能優(yōu)化(某課程筆記)
?
上完這節(jié)課以后,你將能夠描述集群的概念
通過(guò)修改Spark的屬性,環(huán)境變量,或者是日志屬性來(lái)配置Spark
使用Web端界面,以及各種不同的外部工具來(lái)監(jiān)控Spark和應(yīng)用程序
?
?
在Spark集群中有三種主要的組成部分。驅(qū)動(dòng)程序,是放置主程序中SparkContext的地方,要運(yùn)行一個(gè)集群,你需要一個(gè)集群管理器
它可以是單機(jī)版的集群管理器,也可以是 Mesos 或者 Yarn
而worker節(jié)點(diǎn),就是放置執(zhí)行器的地方


?
執(zhí)行器,是運(yùn)行計(jì)算和儲(chǔ)存應(yīng)用程序數(shù)據(jù)的地方。SparkContext以JAR或者Python文件
的形式向每個(gè)執(zhí)行器發(fā)送應(yīng)用程序。最終,它向每個(gè)執(zhí)行器發(fā)送任務(wù)并運(yùn)行
?
因?yàn)轵?qū)動(dòng)程序在集群上調(diào)配任務(wù),它應(yīng)該在相同的本地網(wǎng)絡(luò)中
??
的woker節(jié)點(diǎn)運(yùn)行。如果要向集群發(fā)送遠(yuǎn)端請(qǐng)求


最好使用一個(gè)RPC,并且從附近的節(jié)點(diǎn)提交操作
?
我們前面提到三個(gè)支持的集群管理器
?
對(duì)于Spark的配置,主要有三個(gè)主要的地方


Spark屬性,你可以用SparkConf對(duì)象或者通過(guò)Java系統(tǒng)屬性來(lái)設(shè)置應(yīng)用程序的參數(shù)
環(huán)境變量,你可以用它們來(lái)設(shè)置每一個(gè)機(jī)器的設(shè)定,比如IP地址這是通過(guò)配置每一個(gè)節(jié)點(diǎn)上的conf/spark-env.sh腳本實(shí)現(xiàn)的
對(duì)于日志屬性,它可以通過(guò)log4j.propertieis來(lái)進(jìn)行設(shè)置
你可以選擇修改目前位于SPARK_HOME/conf目錄下的默認(rèn)配置目錄設(shè)定SPARK_CONF_DIR環(huán)境變量并且在這個(gè)目錄下提供你的配置文件


?
?
這里有兩種方法來(lái)設(shè)定Spark屬性:
第一種方法是通過(guò)SparkConf對(duì)象來(lái)傳遞應(yīng)用程序?qū)傩?br />第二種方法是動(dòng)態(tài)地設(shè)置Spark的屬性。Spark允許你在創(chuàng)建一個(gè)SparkContext的時(shí)候傳遞一個(gè)空的SparkConf
然后,在運(yùn)行時(shí)用 “—master” 或者 “—conf” 參數(shù)命令行選項(xiàng)來(lái)提供設(shè)置值


你可以運(yùn)行spark-submit腳本的時(shí)候,通過(guò)“—-help”來(lái)查看各種選項(xiàng)
另一種設(shè)定Spark屬性的方法是在spark-defaults.conf文件里設(shè)置
spark-submit腳本會(huì)從你的文件中讀取這些配置
你可以在應(yīng)用程序的默認(rèn)端口為4040的Web客戶端上查看Spark屬性


最后我想提到的一件注意事項(xiàng),直接SparkConf上設(shè)置的屬性具有最高的優(yōu)先級(jí)
spark-submit或者spark-shell是第二優(yōu)先級(jí),最后是spark-default.conf文件里的設(shè)置。


監(jiān)控Spark應(yīng)用程序有三種方法:第一種方法是使用基于Web的客戶端,它的默認(rèn)端口是4040
在應(yīng)用程序運(yùn)行期間,你可以在這個(gè)客戶端上獲得Spark實(shí)時(shí)監(jiān)控信息
如果你希望在程序運(yùn)行完以后查看這些信息,你需要在應(yīng)用程序開(kāi)始之前把spark.eventlog.enabled屬性設(shè)定為true,這樣所有運(yùn)行的信息就會(huì)被儲(chǔ)存起來(lái)




Metrics是另一種檢測(cè)Spark應(yīng)用程序的方法。這個(gè)metric系統(tǒng)是基于Coda Hale Metrics庫(kù)的
你可以自定義輸出的格式,例如CSV格式的運(yùn)行報(bào)告
可以在conf目錄下的metrics.properties文件中配置metrics系統(tǒng)


最后,也可以通過(guò)外部工具來(lái)監(jiān)控Spark。例如,Gangalia是用來(lái)查看整體集群的利用情況和資源瓶頸的工具。
各種不同的OS profiling工具和JVM工具也可以用來(lái)監(jiān)測(cè)Spark


默認(rèn)設(shè)置下,Web客戶端可以在端口4040下查看,它顯示當(dāng)前
正在運(yùn)行的應(yīng)用程序的信息。Web客戶端,可以看到任務(wù)協(xié)調(diào)器的狀態(tài),提交的任務(wù)狀態(tài),RDD的大小,內(nèi)存使用量的報(bào)告,環(huán)境設(shè)置信息以及
正在運(yùn)行的執(zhí)行器的信息




要在應(yīng)用程序運(yùn)行完以后查看應(yīng)用程序的歷史,你需要啟動(dòng)歷史記錄服務(wù)器配置歷史記錄服務(wù)器可以規(guī)定給它分配多少內(nèi)存
各種JVM的選項(xiàng),服務(wù)器的公共地址以及一系列的屬性




集群中的任何一種資源都有可能成為Spark的瓶頸
Spark的內(nèi)存計(jì)算屬性,數(shù)據(jù)序列化以及內(nèi)存優(yōu)化成為能夠提升Spark效能的
兩個(gè)主要的因素。


數(shù)據(jù)的序列化是一種提升網(wǎng)絡(luò)效能并減少內(nèi)存使用的關(guān)鍵這是當(dāng)你要優(yōu)化Spark應(yīng)用程序需要優(yōu)先考慮的
Spark提供兩個(gè)數(shù)據(jù)序列化的庫(kù)。Java序列化提供更多的選擇,但是它們通常很慢
而且生成過(guò)大的序列化對(duì)象。但這個(gè)是Spark用來(lái)序列化對(duì)象的默認(rèn)庫(kù)
Kyro序列化比Java要快很多,但是不支持所有的序列化類型
你需要提前注冊(cè)這些類庫(kù),來(lái)獲得最好的性能效果,可以通過(guò)設(shè)置SparkConf對(duì)象來(lái)使用Kyro序列化




在內(nèi)存優(yōu)化中,你需要考慮三件事:
1)對(duì)象使用的內(nèi)存有多少(無(wú)論你是否想將全部對(duì)象導(dǎo)入到內(nèi)存中);?
2)獲取這些對(duì)象的成本;
3)垃圾回收的管理費(fèi)用


你創(chuàng)建一個(gè)RDD,先將它緩存,然后查看你驅(qū)動(dòng)程序中的
SparkContext日志。查看日志可以幫助你了解數(shù)據(jù)集需要多少內(nèi)存
這里有減少每個(gè)對(duì)象內(nèi)存使用量的一些建議。盡量避免增加管理費(fèi)用的某些Java特征
比如基于指針的數(shù)據(jù)結(jié)構(gòu)和wrapper對(duì)象。如果可以的話,使用數(shù)組或者原始數(shù)據(jù)類型并且避免使用迭代結(jié)構(gòu)




序列化儲(chǔ)存也可以幫助減少內(nèi)存使用。缺點(diǎn)是它會(huì)導(dǎo)致要花更多的時(shí)間來(lái)獲取數(shù)據(jù)
因?yàn)樵谀闶褂眠@些數(shù)據(jù)之前,你必須要對(duì)它們進(jìn)行反序列化


你可以在垃圾回收器中查看它發(fā)生的頻率,以及它使用時(shí)間的、一系列指標(biāo)。你可以通過(guò)將此行增加到SPARK_JAVA_OPTS環(huán)境變量中來(lái)實(shí)現(xiàn)它


為了要充分利用集群,并行的級(jí)別也是需要考慮的因素之一
它自動(dòng)地被設(shè)置為任務(wù)文件的大小,但是你可以通過(guò)例如在SparkContext.textFile里的
選項(xiàng)參數(shù)來(lái)配置它。你也可以對(duì)spark.default.parallelism的config屬性設(shè)置默認(rèn)的并行級(jí)別。通常來(lái)說(shuō),我們建議在集群中
為每一個(gè)CPU核設(shè)置2到3個(gè)任務(wù)
當(dāng)你的內(nèi)存不能容納你的RDD的時(shí)候,你會(huì)得到一個(gè)OutOfMemoryError錯(cuò)誤
在這種情況下,通過(guò)提升并行級(jí)別可以解決這個(gè)問(wèn)題
通過(guò)提升并行級(jí)別,每一個(gè)輸入的任務(wù)集都會(huì)變得更小,這樣內(nèi)存就可以容納了




通過(guò)Spark的廣播變量的功能,可以極大地減小序列化對(duì)象的大小
有一個(gè)比較好的例子,比如你有某種靜態(tài)的公共查詢表
考慮一下把它變成一個(gè)廣播變量,這樣它就不需要被發(fā)送到
每一個(gè)worker節(jié)點(diǎn)上,省去了很多序列化對(duì)象的工作
Spark將每一個(gè)任務(wù)序列化之后的大小打印到主節(jié)點(diǎn)上。通過(guò)查看這些信息,
也可以幫助檢查否有任務(wù)過(guò)大。如果你發(fā)現(xiàn)某些任務(wù)超過(guò)20KB,你就有必要考慮
是否需要對(duì)它進(jìn)行優(yōu)化,比如創(chuàng)建廣播變量

?

?

?

?Spark1.0.0可以通過(guò)以下幾種方式來(lái)對(duì)Spark應(yīng)用程序進(jìn)行監(jiān)控:

  • Spark應(yīng)用程序的WebUI或者Spark Standalone的集群監(jiān)控
  • 指標(biāo),然后通過(guò)支持指標(biāo)收集的集群監(jiān)控系統(tǒng),如ganglia進(jìn)行監(jiān)控
  • 輔助監(jiān)控工具



1:WebUI
? ?? ?Spark應(yīng)用程序提交后,driver和Executor之間不斷的交換運(yùn)行信息,可以通過(guò)driver的4040端口(默認(rèn)端口)獲取有用的Spark應(yīng)用程序的運(yùn)行信息,如:

  • Stage和Task
  • RDD大小和內(nèi)存使用情況
  • 環(huán)境變量信息
  • executor的運(yùn)行信息
  • ...


? ?? ?如果多個(gè)Spark應(yīng)用程序在同一個(gè)client上以client方式提交,那么driver的WebUI端口將綁定從4040開(kāi)始的連續(xù)端口,如4040、4041、4042...。
? ?? ?需要注意的是,用過(guò)WebUI只能查看Spark應(yīng)用程序在運(yùn)行期間的信息,一旦Spark應(yīng)用程序運(yùn)行完,這些信息將無(wú)法查看,因?yàn)閃ebUI端口隨Spark應(yīng)用程序的完成而關(guān)閉。如果想要事后查看Spark應(yīng)用程序的運(yùn)行信息,那么需要配置history Server來(lái)持久化Spark應(yīng)用程序運(yùn)行信息。關(guān)于history Server參見(jiàn)Spark1.0.0 history server配置(正在撰寫(xiě),遲點(diǎn)給上鏈接) 。

2:指標(biāo)
? ?? ?Spark采用了基于Coda Hale Metrics Library?的可配置的指標(biāo)體系,通過(guò)各種指標(biāo)收集器,如JMX、CSV、GraphiteSink、Ganglia等可以進(jìn)行匯總報(bào)告。該指標(biāo)體系的配置文件位于conf/metrics.properties(通過(guò)復(fù)制conf/metrics.properties.template生成或自建),如果要采用自定義的配置文件,還需要在屬性配置上配置一下spark.metrics.conf。
? ?? ?Spark的指標(biāo)體系針對(duì)Spark不同的組件分解成相應(yīng)的實(shí)例,每個(gè)實(shí)例涵蓋一套指標(biāo)。Spark現(xiàn)在支持的實(shí)例有:

  • master
  • worker
  • applications
  • driver
  • executor


? ?? ?Spark的指標(biāo)體系支持多種收集器,每個(gè)實(shí)例可以采用多個(gè)收集器,也可以不采用。Spark支持的收集器定義在org.apache.spark.metrics.sink,現(xiàn)在支持的收集器有:

  • ConsoleSink
  • CSVSink.
  • JmxSink
  • MetricsServlet
  • GraphiteSink
  • GangliaSink 因?yàn)榘鏅?quán)問(wèn)題,部署包默認(rèn)不含有該收集器;如果需要,要重新編譯嵌入LGPL授權(quán)代碼的源碼。具體使用參見(jiàn)用ganglia監(jiān)控Spark1.0.0(正在撰寫(xiě),遲點(diǎn)給上鏈接)。



3:輔助監(jiān)控工具
? ?? ?可以通過(guò)一些輔助監(jiān)控工具對(duì)Spark應(yīng)用程序運(yùn)行前后和運(yùn)行過(guò)程中系統(tǒng)性能變化來(lái)監(jiān)控Spark應(yīng)用程序。這些輔助工具有:

    • 集群監(jiān)控系統(tǒng),如ganglia、negios、zabbix等,這些工具可以監(jiān)控整個(gè)集群的磁盤(pán)、網(wǎng)絡(luò)、內(nèi)存利用率和性能瓶頸;
    • 操作系統(tǒng)性能分析工具,如dstat、iostat、iotop,這些工具可以對(duì)單臺(tái)機(jī)器的性能進(jìn)行細(xì)致地分析;
    • JVM性能分析工具,如 jstack、jmap、jstat 、jconsole,這些工具可以對(duì)JVM進(jìn)行詳細(xì)的性能分析。

總結(jié)

以上是生活随笔為你收集整理的监控Spark应用方法简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。