Какова основная причина самоподавления, не разрешенного в Spark?

Когда искра записывала большой файл в HDFS с помощью saveAsTextFile, я получил ошибку: java.lang.IllegalArgumentException: Self-suppression not permitted at java.lang.Throwable.addSuppressed(Throwable.java:1043) Caused by: java.io.IOException: All datanodes DatanodeInfoWithStorage

Я искал решение для этого, но я не нашел правильного решения, и я не знаю, почему.

Что вызывает эти ошибки и как их исправить?


person S.Kang    schedule 12.06.2017    source источник
comment
Возможный дубликат Spark: самоподавление не разрешено при записи большого файла в HDFS   -  person rogue-one    schedule 12.06.2017


Ответы (2)


Ошибка self-suppression not permitted здесь не является фактической ошибкой.

Эта ошибка выдается JVM, когда среда выполнения пытается создать несколько экземпляров THROWABLE из кода.

Для этого JDK-7 вводит «suppressedExceptions» в Throwable, чтобы подавить предыдущее исключение и сохранить самое последнее исключение.

Итак, Java пытается - throwable.addSuppressed(throwable) - что недопустимо, а сам экземпляр Throwable выдает исключение IllegalArgumentException, и таким образом теряется настоящее исключение.


Из этого в журнале: Caused by: java.io.IOException: All datanodes DatanodeInfoWithStorag, Похоже, что есть проблема с узлом данных.

Если вы посмотрите на запущенные службы в кластере и убедитесь, что все узлы данных и демоны работают нормально; все может пойти своим чередом.

Проблемы могут быть:

  1. Проблема в узле данных. Перезапустите демоны кластера.
  2. Сердцебиение между узлами данных и узлами имен: проблемы с сетью или проблемы с доступом к разрешениям.
  3. проблема с памятью datanode.
  4. Datanode занят или не отвечает
person Raktotpal Bordoloi    schedule 12.06.2017

Если вы посмотрите документацию Throwable вы найдете полезную информацию о методе addSuppressed. В частности, если у вас есть exception e, и вы делаете e.addSuppressed(e), то будет сгенерировано новое исключение IllegalArgumentException. Это исключение будет отображаться как

java.lang.IllegalArgumentException: Self-suppression not permitted

И, конечно же, ничего об исходном исключении e не будет показано.

Вот ошибки, которые могут выдаваться при вызове addSuppressed:

Выдает: IllegalArgumentException - если исключение является генерируемым; метательный объект не может подавить себя. NullPointerException — если исключение равно null

person claude    schedule 13.02.2021