Примечание:используетсяTencent Cloud EMR 3.3.0 версия, где искра — это версия 3.0.2.
Процесс расследования:
Задачи Spark SQL, выполняемые ежечасно в кластере EMR, иногда завершаются сбоем. Ошибку можно увидеть в журнале драйвера: org.apache.spark.sql.catalyst.errors.package$TreeNodeException: выполнить, дерево.
В журнале соответствующего приложения на Yarn видно, что исполнитель непрерывно отправляет созданную информацию (шаги выполнения, широковещательные переменные) драйверу.
Из момента времени мы видим, что в течение периода времени с 16:16:37 до 16:16:44 исполнитель непрерывно отправляет информацию (шаги выполнения, широковещательные переменные) драйверу.
, вы также можете увидеть большое количество широковещательных переменных драйвера на соответствующей веб-странице. И в 16:16:45 водитель сообщил об ошибке.
Просмотрите код, соответствующий стеку ошибок org.apache.spark.sql.execution.exchange.BroadcastExchangeExec.$anonfun$relationFuture$1(BroadcastExchangeExec.scala:169).
Стек ошибок:
Caused by: org.apache.spark.util.SparkFatalException
at org.apache.spark.sql.execution.exchange.BroadcastExchangeExec.$anonfun$relationFuture$1(BroadcastExchangeExec.scala:169)
at org.apache.spark.sql.execution.SQLExecution$.$anonfun$withThreadLocalCaptured$1(SQLExecution.scala:182)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
... 1 more
Соответствующий код:
https://github.com/apache/spark/blob/branch-3.0/sql/core/src/main/scala/org/apache/spark/sql/execution/exchange/BroadcastExchangeExec.scala
Результаты устранения неполадок:
Отчет об ошибке, вызванной oom на стороне водителя.
Решение:
1. Отключите широковещательные переменные (установите spark.sql.autoBroadcastJoinThreshold = -1);
2. Увеличьте значение spark.driver.memory, например 4g.