Spark監控官方文檔學習筆記


任務的監控和使用

有幾種方式監控spark應用:Web UI,指標和外部方法

Web接口

每個SparkContext都會啟動一個web UI,默認是4040端口,用來展示一些信息:

  1. 一系列調度的stage和task
  2. RDD大小和內存的使用概況
  3. 環境變量信息
  4. excutors的相關信息

可以通過http://<driver-node>:4040訪問,如果有多個sparkcontext運行在同一個節點,那么端口會依次為4040、4041、4042。

注意這些信息只有在應用執行期間才能看到。如果想要執行完畢查看,那么可以在應用開始前設置spark.eventLog.enabledtrue,這樣spark的日志信息會被持久化。

在應用執行結束后查看web UI

當應用執行完畢,可以在Spark History Server上查看日志。可以通過下面的命令啟動history server:

./start-history-server.sh

這樣默認訪問http://<server-url>:18080即可。

如果使用文件系統的provider class(比如spark.history.provider),需要配置spark.history.fs.logDirectory選項。

spark的jobs本身需要配置日志,並且輸出到相同的共享、可寫目錄。比如,下面就把日志輸出到hdfs://namenode/shared/spark-logs,client需要增加配置:

spark.eventLog.enabled true
spark.eventLog.dir hdfs://namenode/shared/spark-logs

環境變量

變量 說明
SPARK_DAEMON_MEMORY history server分配的內存
SPARK_DAEMON_JAVA_OPTS JVM選項
SPARK_PUBLIC_DNS 對外的地址,如果沒有設置應該是用回環地址,這塊沒怎么看明白
SPARK_HISTORY_OPTS history server的配置

配置

變量名 默認值 說明
spark.history.provider org.apache.spark.deploy.history.FsHistoryProvider history背后的實現類,目前spark就提供這一種,是基於文件系統的
spark.history.fs.logDirectory file:/tmp/spark-events 支持file://或者hdfs://
spark.history.fs.update.interval 10s 這個是服務器刷新的時間,只有服務器這邊刷新了,webUI那邊才有反應
spark.history.retainedApplications 50 緩存的應用個數,如果超過限制,會從磁盤加載
spark.history.ui.maxApplications Int.MaxValue 概況首頁可以顯示的應用數量
spark.history.ui.piort 18080 端口號
spark.history.kerberos.enabled false 是否使用kerberos登陸
spark.history.kerberos.principal kerberos不了解
spark.history.kerberos.keytab kerberos不了解
spark.history.ui.acls.enable false acl校驗
spark.history.ui.admin.acls empty 可以查看history server的用戶,*代表所有用戶
spark.history.fs.cleaner.enabled false 是否周期性的清除日志
spark.history.fs.cleaner.interval 1d 多長時間檢查一次,應用日志是否清除
spark.history.fs.cleaner.maxAge 7d 超過這個時間的日志會被清除掉
spark.history.fs.numReplayThreads 25% of available cores history server可以用的處理日志的線程數

注意在概況首頁,所有的列都可以點擊用來排序。

  1. history server可以同時展示完成或者未完成的spark任務。如果應用在失敗后有多次嘗試,失敗的記錄也會展示出來。
  2. 未完成的應用需要等待服務器內部刷新。刷新的時間可以通過spark.history.fs.update.interval。如果集群很大,那么刷新時間應該長一點,如果想看實時的數據,可以通過web UI查看
  3. application如果中途直接退出,那么會被標注為未完成。
  4. 想要標記spark為完成狀態,需要sc.stop()方法執行

Rest API

另外可以通過UI查看指標。這樣可以讓開發者很容易的創建一些可視化的工具。這些命令同時也只支持正在運行的應用。對於history server,訪問的地址是http://<server-url>:18080/api/v1,對於正在運行的任務,可以訪問http://localhost:4040/api/v1

在這些api中,應用的標識為ID[app-id]。當通過YARN啟動時,每個應用可能會有多次嘗試,只有在cluster模式下才有 應用嘗試的id,client模式是沒有的。如果是集群模式,那么app-id其實是[base-app-id]/[attempt-id],其中base-app-id是yarn的appid。

?status=[active|complete|pending|failed] 可以列出對應的狀態

url 說明
/applications 列出所有的應用。?status=[complete|running]選擇對應的狀態展示?minDate=[date]顯示最小日期的應用,?maxDate=[date]``minEndDate=[date]``?maxEndDate=[date]``?limit=[limit]
/applications/[app-id]/jobs 展示對應的jobs
/applications/[app-id]/jobs/[job-id] job信息
/applications/[app-id]/stages stages信息
/applications/[app-id]/executors excutors信息
/applications/[app-id]/streaming/statistics streaming信息

其他工具

其他相關的性能調優的工具:

  1. 集群監控,可以使用Ganglia
  2. 操作系統監控,可以用dstat, iostat, iotop
  3. JVM可以用jstack, jstat, jconsole


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM