Исключение таймаута в Apache-Spark во время выполнения программы

Я запускаю скрипт Bash в MAC. Этот скрипт вызывает метод spark, написанный на языке Scala большое количество раз. В настоящее время я пытаюсь вызвать этот метод spark для 100 000 раз, используя цикл for.

код завершает работу со следующим исключением после небольшого числа итераций, около 3000 итераций.

org.apache.spark.rpc.RpcTimeoutException: Futures timed out after [10 seconds]. This timeout is controlled by spark.executor.heartbeatInterval
    at org.apache.spark.rpc.RpcTimeout.org$apache$spark$rpc$RpcTimeout$$createRpcTimeoutException(RpcTimeout.scala:48)
    at org.apache.spark.rpc.RpcTimeout$$anonfun$addMessageIfTimeout.applyOrElse(RpcTimeout.scala:63)
    at org.apache.spark.rpc.RpcTimeout$$anonfun$addMessageIfTimeout.applyOrElse(RpcTimeout.scala:59)
    at scala.PartialFunction$OrElse.apply(PartialFunction.scala:167)
    at org.apache.spark.rpc.RpcTimeout.awaitResult(RpcTimeout.scala:83)
    at org.apache.spark.rpc.RpcEndpointRef.askWithRetry(RpcEndpointRef.scala:102)
    at org.apache.spark.executor.Executor.org$apache$spark$executor$Executor$$reportHeartBeat(Executor.scala:518)
    at org.apache.spark.executor.Executor$$anon$$anonfun$run.apply$mcV$sp(Executor.scala:547)
    at org.apache.spark.executor.Executor$$anon$$anonfun$run.apply(Executor.scala:547)
    at org.apache.spark.executor.Executor$$anon$$anonfun$run.apply(Executor.scala:547)
    at org.apache.spark.util.Utils$.logUncaughtExceptions(Utils.scala:1877)
    at org.apache.spark.executor.Executor$$anon.run(Executor.scala:547)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)

Exception in thread "dag-scheduler-event-loop" 16/11/22 13:37:32 WARN NioEventLoop: Unexpected exception in the selector loop.
java.lang.OutOfMemoryError: Java heap space
    at io.netty.util.internal.MpscLinkedQueue.offer(MpscLinkedQueue.java:126)
    at io.netty.util.internal.MpscLinkedQueue.add(MpscLinkedQueue.java:221)
    at io.netty.util.concurrent.SingleThreadEventExecutor.fetchFromScheduledTaskQueue(SingleThreadEventExecutor.java:259)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:346)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
    at io.netty.util.concurrent.SingleThreadEventExecutor.run(SingleThreadEventExecutor.java:111)
    at java.lang.Thread.run(Thread.java:745)
java.lang.OutOfMemoryError: Java heap space
    at java.util.regex.Pattern.compile(Pattern.java:1047)
    at java.lang.String.replace(String.java:2180)
    at org.apache.spark.util.Utils$.getFormattedClassName(Utils.scala:1728)
    at org.apache.spark.storage.RDDInfo$$anonfun.apply(RDDInfo.scala:57)
    at org.apache.spark.storage.RDDInfo$$anonfun.apply(RDDInfo.scala:57)
    at scala.Option.getOrElse(Option.scala:121)
    at org.apache.spark.storage.RDDInfo$.fromRdd(RDDInfo.scala:57)
    at org.apache.spark.scheduler.StageInfo$$anonfun.apply(StageInfo.scala:87)

может кто-нибудь помочь, пожалуйста, эта ошибка вызвана из-за большого количества вызовов метода spark?

4 ответов


его RpcTimeoutException .. так что spark.network.timeout (spark.rpc.askTimeout) может быть настроен с большим, чем значения по умолчанию для обработки сложной рабочей нагрузки. Вы можете начать с этих значений и настроить их в соответствии с вашими рабочими нагрузками. Пожалуйста, смотрите последний

spark.network.timeout 120S тайм-аут по умолчанию для всей сети взаимодействия. Эта конфигурация будет использоваться вместо искра.ядро.соединение.извед.ждать.перерыв, искра.место хранения.blockManagerSlaveTimeoutMs, искры.перетасовать.Ио.connectiontimeout, т., искра.протокол RPC.askTimeout или искра.протокол RPC.lookupTimeout, если они не настроены.

также рассмотрите возможность увеличения памяти исполнителя i.e spark.executor.memory и большинство вещей imp-это обзор вашего кода, чтобы проверить, является ли это кандидатом для дальнейшей оптимизации.

решение: значение 600 основано на требовании

set by SparkConf: conf.set("spark.network.timeout", "600s")
set by spark-defaults.conf: spark.network.timeout 600s
set when calling spark-submit: --conf spark.network.timeout=600s

вышеуказанная трассировка стека также показана Java heap space его ошибка OOM, поэтому один раз попробуйте увеличить память и запустить ее и относительно тайм-аута ее тайм-аута rpc, чтобы вы могли установить spark.network.timeout С значение тайм-аута в соответствии с вашими потребностями...


pls увеличить память исполнителя, так что ООМ уйдет еще сделать chnage в коде, так что ваш RDD не будет иметь большого отпечатка ноги памяти.

--executer-memory = 3G


увеличить spark.executor.heartbeatInterval до 20, ошибка говорит об этом.