Databricks 作业在从 adf 调用时失败并出现错误:org.apache.spark.SparkException:作业中止。
错误详情: Caused by: org.apache.spark.memory.SparkOutOfMemoryError: Unable to acquire 65536 bytes of memory, 得到 0 在 org.apache.spark.memory.MemoryConsumer.throwOom(MemoryConsumer.java:157) 在 org.apache.spark.memory.MemoryConsumer.allocateArray(MemoryConsumer.java:97) 在 org.apache.spark.util.collection.unsafe.sort.UnsafeInMemorySorter.(UnsafeInMemorySorter.java:139) 在 org.apache.spark.util.collection.unsafe.sort.UnsafeExternalSorter.(UnsafeExternalSorter.java:165) 在 org.apache.spark.util.collection.unsafe.sort.UnsafeExternalSorter.create(UnsafeExternalSorter.java:132) 在 org.apache.spark.sql.execution.UnsafeExternalRowSorter.(UnsafeExternalRowSorter.java:112) 在 org.apache.spark.sql.execution.UnsafeExternalRowSorter.create(UnsafeExternalRowSorter.java:97)
我曾尝试每 500 秒重试 5 次,它曾用于解决问题,因为它在其中一次重试中运行良好,但现在即使在运行 5 次后,它也会出错。但是当直接从笔记本上尝试时它运行良好。
我认为这是一个内存问题,有什么解决方案可以解决这个问题吗?
OOM(内存不足)错误在负载增加或数据量增加时很常见。 (或更多洗牌?)
有时在没有指定 OOM 的情况下抛出内部服务器错误是很常见的,但这仍然是原因。
在这种情况下,错误消息指出 OOM,这意味着您应该增加内存或扩展集群。
P.S:在 OOM 场景下不建议重试,因为错误往往会在一段时间后成为永久性错误,例如当集群无法再承受时。