【Spark WebUI】HistoryServer缓存的应用被回收导致此类应用页面访问时出错
用户问题
在History Server页面中访问某个Spark应用的页面时,发现访问时出错。
查看相应的HistoryServer日志后,发现有“FileNotFound”异常,相关日志如下所示:
2020-11-22 23:58:03,694 | WARN | [qtp55429210-232] | /history/application_1479662594976_0001/stages/stage/ | org.sparkproject.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:628) java.io.FileNotFoundException: ${BIGDATA_HOME}/tmp/spark/jobHistoryTemp/blockmgr-5f1f6aca-2303-4290-9845-88fa94d78480/09/temp_shuffle_11f82aaf-e226-46dc-b1f0-002751557694 (No such file or directory)
原因分析
在History Server页面加载Task个数较多的Spark应用时,由于无法把全部的数据放入内存中,导致数据溢出到磁盘时,会产生前缀为“temp_shuffle”的文件。
HistoryServer默认会缓存50个Spark应用(由配置项“spark.history.retainedApplications”决定),当内存中的Spark应用个数超过这个数值时,HistoryServer会回收最先缓存的Spark应用,同时会清理掉相应的“temp_shuffle”文件。
当用户正在查看即将被回收的Spark应用时,可能会出现找不到“temp_shuffle”文件的错误,从而导致当前页面无法访问。
处理步骤
如果遇到上述问题,可参考以下两种方法解决。
- 重新访问这个Spark应用的HistoryServer页面,即可查看到正确的页面信息。
- 如果用户场景需要同时访问50个以上的Spark应用时,需要调大“spark.history.retainedApplications”参数的值。
请登录FusionInsight Manager管理界面,选择“集群 > 服务 > Spark2x > 配置”,单击“全部配置”,在左侧的导航列表中,单击“JobHistory2x > 界面”,配置如下参数。
表1 参数说明 参数
描述
默认值
spark.history.retainedApplications
HistoryServer缓存的Spark应用数,当需要缓存的应用个数超过此参数值时,HistoryServer会回收最先缓存的Spark应用。
50