AWS EMR v6.7.0历史服务器查看大任务报HTTP 500内存溢出错误
解决AWS EMR v6.7.0 History Server查看大型任务时的HTTP 500(OOM)错误
问题原因
从报错日志可明确,History Server加载解析大型任务的事件日志时,Java堆内存不足,抛出OutOfMemoryError进而触发HTTP 500异常。小型任务日志量小,内存占用在阈值内,因此能正常查看。
解决方案
调高History Server堆内存上限
History Server默认堆内存无法支撑大型任务的日志解析,需通过spark.history.server.maxMemory参数提升内存配额,比如设置为8G(建议不超过节点可用内存的70%,根据实际情况调整):
在EMR集群配置的Spark分类中添加:[ { "Classification": "spark-history-server", "Properties": { "spark.history.server.maxMemory": "8g" } } ]若History Server已运行,修改配置后需重启服务:
sudo systemctl restart spark-history-server启用事件日志压缩降低内存开销
开启事件日志压缩,缩小日志文件体积,减少解析时的内存占用:
在Spark默认配置中添加:[ { "Classification": "spark-defaults", "Properties": { "spark.eventLog.compress": "true", "spark.eventLog.compression.codec": "snappy" } } ]配置日志自动清理减少内存占用
开启History Server的日志自动清理功能,避免旧日志持续消耗内存和存储资源:[ { "Classification": "spark-history-server", "Properties": { "spark.history.fs.cleaner.enabled": "true", "spark.history.fs.cleaner.interval": "1d", "spark.history.fs.cleaner.maxAge": "7d" } } ]上述配置表示每日清理一次,保留最近7天的日志。
限制缓存的应用数量
通过spark.history.ui.maxApplications限制History Server同时缓存的应用UI数量,避免内存被过多应用占用:[ { "Classification": "spark-history-server", "Properties": { "spark.history.ui.maxApplications": "50" } } ]升级History Server节点规格
若上述配置调整后仍无法解决问题,需为运行History Server的节点选择更大内存规格的EC2实例,确保节点有足够物理内存支撑堆内存分配。
内容的提问来源于stack exchange,提问作者Golan Kiviti
相关产品推荐
相关产品推荐

