apache-spark - Spark结构化流 - java.lang.OutOfMemoryError:Java堆空间
问题描述
使用 Spark 结构化流处理输入流时出现以下异常。
org.apache.spark.SparkException:作业因阶段失败而中止:阶段 5.0 中的任务 22 失败 1 次,最近一次失败:阶段 5.0 中丢失任务 22.0(TID 403,本地主机,执行程序驱动程序):java.lang.OutOfMemoryError: Java 堆空间
我已经处理了下面给出的水印,
.withWatermark("timestamp", "5 seconds")
.groupBy(window($"timestamp", "1 second"), $"column")
可能是什么问题?我尝试将触发器从默认更改为固定间隔,但我仍然面临问题。
解决方案
我不认为这个问题与水印或触发器有关。OutOfMemory
出现错误的原因有两个:
内存泄漏。这个编程错误会导致你的应用程序不断地消耗更多的内存。每次使用应用程序的泄漏功能时,都会将一些对象留在 Java 堆空间中。随着时间的推移,泄漏的对象会消耗所有可用的 Java 堆空间并触发错误。
指定给它的资源的数据过多。您的集群有一个指定的阈值,并且只能容纳一定数量的数据。当数据量超过该阈值时,在峰值之前正常运行的作业停止运行并触发
java.lang.OutOfMemoryError: Java heap space error
.
您的错误也说明task 22.0 in stage 5.0
了这意味着它成功完成了第 1-4 阶段。对我来说,这意味着分配给它的资源有太多数据,因为它不会像内存泄漏那样在多次运行中死亡。尝试使用类似spark.readStream.option("maxFilesPerTrigger", "6")
或增加分配给该集群的内存来限制读取的数据量。
推荐阅读
- firebase - 在安装 firebase-tools 时,尽管已经安装了 NPM,但仍然会发出依赖警告
- .net-core - 改进 Net Core 3.1 Blazor 服务器端 Visual Studio 2019 的开发构建时间
- php - 使用 PHP 使用两个输入文件上传两个文件
- mysql - 将 3 个 MySql 查询合并为 1 个查询
- php - 选中的复选框返回值“on”
- next.js - React dangerouslySetInnerHTML 用 & 字符破坏 JSON 配置
- azure - Azure windows VM 已失去对 azure sql server 的访问权限
- xcode - 找不到 -lRNGestureHandler 的库
- linux - Ubuntu 18.04 错误:缺少 libc++_shared.so
- mysql - MySQL 在一个 Common Column 上加入 3 个表并修改列