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?
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.
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
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.timeout
avec une valeur de dépassement de délai en fonction de vos besoins ...
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
Augmentez simplement le spark.executor.heartbeatInterval
à 20s, l’erreur dit cela.