任务的监控和使用
有几种方式监控spark应用:Web UI,指标和外部方法
每个SparkContext都会启动一个web UI,默认是4040端口,用来展示一些信息:
可以通过http://<driver-node>:4040
访问,如果有多个sparkcontext运行在同一个节点,那么端口会依次为4040、4041、4042。
注意这些信息只有在应用执行期间才能看到。如果想要执行完毕查看,那么可以在应用开始前设置spark.eventLog.enabled
为true
,这样spark的日志信息会被持久化。
当应用执行完毕,可以在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可以用的处理日志的线程数 |
注意在概况首页,所有的列都可以点击用来排序。
spark.history.fs.update.interval
。如果集群很大,那么刷新时间应该长一点,如果想看实时的数据,可以通过web UI查看另外可以通过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信息 |
其他相关的性能调优的工具: