当spark使用saveAsTextFile将大文件写入HDFS时,我收到错误:java.lang.IllegalArgumentException: Self-suppression not permitted at java.lang.Throwable.addSuppressed(Throwable.java:1043)
Caused by: java.io.IOException: All datanodes DatanodeInfoWithStorage
我已经找到了解决方法,但我找不到合适的解决方案而且我不知道为什么。
导致这些错误的原因是什么,我该如何解决?
答案 0 :(得分:3)
错误self-suppression not permitted
不是此处的实际错误。
当运行时尝试从代码中抛出多个THROWABLE
实例时,JVM会抛出此错误。
为此,JDK-7向Throwable引入了“suppressExceptions”以抑制先前的异常并保留最近的异常。
所以Java尝试 - throwable.addSuppressed(throwable)
- 这是无效的,Throwable实例本身会抛出IllegalArgumentException,真正的异常会以这种方式丢失。
从log Caused by: java.io.IOException: All datanodes DatanodeInfoWithStorag
开始,似乎datanode存在一些问题。
如果查看集群中正在运行的服务,并检查所有datanode和守护程序是否正常运行;事情可能会进入轨道。
问题可能是:
答案 1 :(得分:0)
如果您查看 Throwable 的文档,您会发现一些有关 addSuppressed
方法的有用信息。具体来说,如果您有一个 exception e
,并且您执行了 e.addSuppressed(e)
,那么将生成一个新的 IllegalArgumentException 异常。此异常将显示为
java.lang.IllegalArgumentException: Self-suppression not permitted
当然,不会显示原始异常 e
的任何内容。
以下是调用 addSuppressed
时可能抛出的错误:
抛出: IllegalArgumentException - 如果异常是可以抛出的; throwable 无法抑制自身。 NullPointerException - 如果异常为空