《Spark官方文档》监控和工具-学习笔记

官网链接:Monitoring and Instrumentation - Spark 3.2.1 Documentation

有几种方法可以监控Spark应用程序:Web UI、metrics 以及外部工具。


Web UI

每个SparkContext都会启动一个web UI,其默认端口为4040,并且这个web UI能展示很多有用的Spark应用相关信息。包括:

  • 一个stage和task的调度列表
  • 一个关于RDD大小以及内存占用的概览
  • 运行环境相关信息
  • 运行中的执行器相关信息

你只需打开浏览器,输入 http://<driver-node>:4040 即可访问该web界面。如果有多个SparkContext在同时运行中,那么它们会从4040开始,按顺序依次绑定端口(4041,4042等)。

注意,默认情况下,这些信息只有在Spark应用运行期间才可用。如果需要在Spark应用退出后仍然能在web UI上查看这些信息,则需要在应用启动前,将 spark.eventLog.enabled 设为 true。这项配置将会把Spark事件日志都记录到持久化存储中。

1.程序结束后查看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

1)环境变量

变量说明
SPARK_DAEMON_MEMORYhistory server分配的内存
SPARK_DAEMON_JAVA_OPTSJVM选项
SPARK_PUBLIC_DNS对外的地址,如果没有设置应该是用回环地址,这块没怎么看明白
SPARK_HISTORY_OPTShistory server的配置

2)配置

变量名默认值说明
spark.history.providerorg.apache.spark.deploy.history.FsHistoryProviderhistory背后的实现类,目前spark就提供这一种,是基于文件系统的
spark.history.fs.logDirectoryfile:/tmp/spark-events支持file://或者hdfs://
spark.history.fs.update.interval10s这个是服务器刷新的时间,只有服务器这边刷新了,webUI那边才有反应
spark.history.retainedApplications50缓存的应用个数,如果超过限制,会从磁盘加载
spark.history.ui.maxApplicationsInt.MaxValue概况首页可以显示的应用数量
spark.history.ui.piort18080端口号
spark.history.kerberos.enabledfalse是否使用kerberos登陆
spark.history.kerberos.principalkerberos不了解
spark.history.kerberos.keytabkerberos不了解
spark.history.ui.acls.enablefalseacl校验
spark.history.ui.admin.aclsempty可以查看history server的用户,*代表所有用户
spark.history.fs.cleaner.enabledfalse是否周期性的清除日志
spark.history.fs.cleaner.interval1d多长时间检查一次,应用日志是否清除
spark.history.fs.cleaner.maxAge7d超过这个时间的日志会被清除掉
spark.history.fs.numReplayThreads25% of available coreshistory server可以用的处理日志的线程数

注意在概况首页,所有的列都可以点击用来排序。

  1. history server可以同时展示完成或者未完成的spark任务。如果应用在失败后有多次尝试,失败的记录也会展示出来。
  2. 未完成的应用需要等待服务器内部刷新。刷新的时间可以通过spark.history.fs.update.interval。如果集群很大,那么刷新时间应该长一点,如果想看实时的数据,可以通过web UI查看
  3. application如果中途直接退出,那么会被标注为未完成。
  4. 想要标记spark为完成状态,需要sc.stop()方法执行

2.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
/applications/[app-id]/jobs展示对应的jobs
/applications/[app-id]/jobs/[job-id]job信息
/applications/[app-id]/stagesstages信息
/applications/[app-id]/executorsexcutors信息
/applications/[app-id]/streaming/statisticsstreaming信息

高级工具

其他相关的性能调优的工具:

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

Spark 还提供了一个插件 API,以便可以将自定义检测代码添加到 Spark 应用程序中。有两个配置键可用于将插件加载到 Spark 中:

  • spark.plugins
  • spark.plugins.defaultList

两者都采用逗号分隔的类名列表,以实现 org.apache.spark.api.plugin.SparkPlugin 接口。这两个名称的存在使得可以将一个列表放置在 Spark 默认配置文件中,从而允许用户从命令行轻松添加其他插件,而不会覆盖配置文件的列表。重复的插件将被忽略。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值