web-dev-qa-db-fra.com

Exception de délai d'attente dans Apache-Spark pendant l'exécution du programme

J'exécute un script Bash dans MAC. Ce script appelle une méthode spark écrite en langage Scala plusieurs fois. J'essaie actuellement d'appeler cette méthode spark 100 000 fois en utilisant une boucle for.

Le code se ferme avec l'exception suivante après avoir exécuté un petit nombre d'itérations, environ 3 000 itérations.

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$1.applyOrElse(RpcTimeout.scala:63)
    at org.Apache.spark.rpc.RpcTimeout$$anonfun$addMessageIfTimeout$1.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$1$$anonfun$run$1.apply$mcV$sp(Executor.scala:547)
    at org.Apache.spark.executor.Executor$$anon$1$$anonfun$run$1.apply(Executor.scala:547)
    at org.Apache.spark.executor.Executor$$anon$1$$anonfun$run$1.apply(Executor.scala:547)
    at org.Apache.spark.util.Utils$.logUncaughtExceptions(Utils.scala:1877)
    at org.Apache.spark.executor.Executor$$anon$1.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$2.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$1.apply(RDDInfo.scala:57)
    at org.Apache.spark.storage.RDDInfo$$anonfun$1.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$1.apply(StageInfo.scala:87)

Quelqu'un peut-il aider s'il vous plaît, cette erreur est causée en raison d'un grand nombre d'appels à la méthode d'étincelle?

7
Aroon

Sa RpcTimeoutException .. so spark.network.timeout (spark.rpc.askTimeout) pourrait être ajusté avec des valeurs plus grandes que la valeur par défaut afin de gérer une charge de travail complexe. Vous pouvez commencer avec ces valeurs et vous adapter en conséquence à vos charges de travail ..___ Veuillez consulter latest

spark.network.timeout 120s Délai d'attente par défaut pour tous les réseaux les interactions. Cette configuration sera utilisée à la place de spark.core.connection.ack.wait.timeout, spark.storage.blockManagerSlaveTimeoutMs, spark.shuffle.io.connectionTimeout, spark.rpc.askTimeout ou spark.rpc.lookupTimeout s'ils ne sont pas configurés.

Pensez également à augmenter la mémoire de l'exécutant, c.-à-d. spark.executor.memory, et la plupart des problèmes concernent la révision de votre code, afin de vérifier si cette dernière est candidate à une optimisation supplémentaire.

Solution: la valeur 600 est basée sur l'exigence

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
13
Ram Ghadiyaram

La trace de pile ci-dessus indique également l’erreur de MOO dans l’espace de tas Java; essayez donc une fois d’augmenter la mémoire et de l’exécuter, ainsi que le délai d’expiration de son délai d’exécution rpc, de sorte que vous puissiez définirspark.network.timeoutavec une valeur de dépassement de délai en fonction de vos besoins ...

3
Sandeep Purohit

les pls augmentent la mémoire de l'exécuteur afin que le MOO disparaisse, sinon apportez des modifications dans le code de sorte que votre RDD n'aura pas une grande empreinte mémoire.

--executer-memory = 3G

1
Prem S

Augmentez simplement le spark.executor.heartbeatInterval à 20s, l’erreur dit cela.

0
Luckylukee