web-dev-qa-db-de.com

Mögliche Gründe für das Empfangen von TimeoutException: Bei der Arbeit mit Spark kam es nach [n Sekunden] zu einem Timeout

Ich arbeite an einem Spark SQL-Programm und erhalte folgende Ausnahme:

16/11/07 15:58:25 ERROR yarn.ApplicationMaster: User class threw exception: Java.util.concurrent.TimeoutException: Futures timed out after [3000 seconds]
Java.util.concurrent.TimeoutException: Futures timed out after [3000 seconds]
    at scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:219)
    at scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:223)
    at scala.concurrent.Await$$anonfun$result$1.apply(package.scala:190)
    at scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:53)
    at scala.concurrent.Await$.result(package.scala:190)
    at org.Apache.spark.sql.execution.joins.BroadcastHashJoin.doExecute(BroadcastHashJoin.scala:107)
    at org.Apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:132)
    at org.Apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:130)
    at org.Apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:150)
    at org.Apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:130)
    at org.Apache.spark.sql.execution.Project.doExecute(basicOperators.scala:46)
    at org.Apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:132)
    at org.Apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:130)
    at org.Apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:150)
    at org.Apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:130)
    at org.Apache.spark.sql.execution.Union$$anonfun$doExecute$1.apply(basicOperators.scala:144)
    at org.Apache.spark.sql.execution.Union$$anonfun$doExecute$1.apply(basicOperators.scala:144)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:245)
    at scala.collection.immutable.List.map(List.scala:285)
    at org.Apache.spark.sql.execution.Union.doExecute(basicOperators.scala:144)
    at org.Apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:132)
    at org.Apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:130)
    at org.Apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:150)
    at org.Apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:130)
    at org.Apache.spark.sql.execution.columnar.InMemoryRelation.buildBuffers(InMemoryColumnarTableScan.scala:129)
    at org.Apache.spark.sql.execution.columnar.InMemoryRelation.<init>(InMemoryColumnarTableScan.scala:118)
    at org.Apache.spark.sql.execution.columnar.InMemoryRelation$.apply(InMemoryColumnarTableScan.scala:41)
    at org.Apache.spark.sql.execution.CacheManager$$anonfun$cacheQuery$1.apply(CacheManager.scala:93)
    at org.Apache.spark.sql.execution.CacheManager.writeLock(CacheManager.scala:60)
    at org.Apache.spark.sql.execution.CacheManager.cacheQuery(CacheManager.scala:84)
    at org.Apache.spark.sql.DataFrame.persist(DataFrame.scala:1581)
    at org.Apache.spark.sql.DataFrame.cache(DataFrame.scala:1590)
    at com.somecompany.ml.modeling.NewModel.getTrainingSet(FlowForNewModel.scala:56)
    at com.somecompany.ml.modeling.NewModel.generateArtifacts(FlowForNewModel.scala:32)
    at com.somecompany.ml.modeling.Flow$class.run(Flow.scala:52)
    at com.somecompany.ml.modeling.lowForNewModel.run(FlowForNewModel.scala:15)
    at com.somecompany.ml.Main$$anonfun$2.apply(Main.scala:54)
    at com.somecompany.ml.Main$$anonfun$2.apply(Main.scala:54)
    at scala.Option.getOrElse(Option.scala:121)
    at com.somecompany.ml.Main$.main(Main.scala:46)
    at com.somecompany.ml.Main.main(Main.scala)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:498)
    at org.Apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:542)
16/11/07 15:58:25 INFO yarn.ApplicationMaster: Final app status: FAILED, exitCode: 15, (reason: User class threw exception: Java.util.concurrent.TimeoutException: Futures timed out after [3000 seconds])

Der letzte Teil meines Codes, den ich aus der Stack-Ablaufverfolgung wiedererkenne, ist com.somecompany.ml.modeling.NewModel.getTrainingSet(FlowForNewModel.scala:56), wodurch ich zu dieser Zeile komme: profilesDF.cache() Vor dem Zwischenspeichern führe ich eine Vereinigung zwischen 2 Datenrahmen durch. Ich habe eine Antwort darauf gesehen, dass beide Datenframes vor dem Join bestehen bleiben here Ich muss das vereinigte Datenframe immer noch zwischenspeichern, da ich es in einigen meiner Transformationen verwende

Und ich habe mich gefragt, warum diese Ausnahme ausgelöst werden könnte. Wenn ich danach suche, kam ich zu einem Link, der sich mit der Ausnahme für das RPC-Zeitlimit oder einigen Sicherheitsproblemen befasst, was nicht mein Problem ist Ich würde es natürlich zu schätzen wissen, aber selbst wenn ich nur das Problem verstehe, kann ich es lösen

Danke im Voraus

15
Gideon

Frage: Ich habe mich gefragt, warum diese Ausnahme ausgelöst werden kann.

Antworten :

spark.sql.broadcastTimeout 300 Timeout in Sekunden für die Übertragung Wartezeit in Broadcast-Joins

spark.network.timeout 120s Standard-Timeout für alle Netzwerkinteraktionen .. spark.network.timeout (spark.rpc.askTimeout), spark.sql.broadcastTimeout, spark.kryoserializer.buffer.max (wenn Sie kryo Serialisierung verwenden) usw. werden in .__ mit Werten über dem Standardwert abgeglichen. um komplexe Abfragen zu bearbeiten. Sie können mit diesen Werten und .__ beginnen. Passen Sie die SQL-Workloads entsprechend an.

Hinweis: Doc sagt, dass

Die folgenden Optionen (siehe Eigenschaften von spark.sql.) Können auch verwendet werden, um die Leistung der Abfrageausführung zu optimieren. Es ist möglich, dass diese Optionen in zukünftigen Versionen nicht mehr verwendet werden, da automatisch weitere Optimierungen durchgeführt werden. * 

Zum besseren Verständnis können Sie auch BroadCastHashJoin sehen, an dem die Ausführungsmethode der Triggerpunkt für die obige Stapelablaufverfolgung ist.

protected override def doExecute(): RDD[Row] = {
    val broadcastRelation = Await.result(broadcastFuture, timeout)

    streamedPlan.execute().mapPartitions { streamedIter =>
      hashJoin(streamedIter, broadcastRelation.value)
    }
  }
15
Ram Ghadiyaram

Gut zu wissen, dass der Vorschlag von Ram in einigen Fällen funktioniert. Ich möchte erwähnen, dass ich einige Male über diese Ausnahme gestolpert bin (einschließlich der beschriebenen hier ).

Meistens lag es an fast stillen OOMs einiger Executor. Überprüfen Sie die SparkUI auf fehlgeschlagene Aufgaben, letzte Spalte dieser Tabelle:  task panel for a stage in SparkUI Möglicherweise bemerken Sie OOM-Nachrichten.

Wenn Sie die internen Informationen gut verstehen, werden die gesendeten Daten durch den Treiber geleitet. Der Treiber hat also einen Thread-Mechanismus, um die Daten von Executoren zu sammeln und an alle zurückzusenden. Wenn ein Executor irgendwann fehlschlägt, kann es sein, dass Sie diese Zeitüberschreitungen erhalten.

1
mathieu

Wenn Sie DynamicAllocation aktiviert haben, deaktivieren Sie diese Konfiguration (spark.dynamicAllocation.enabled = false). Sie können diese Funken-Konfiguration unter conf/spark-defaults.conf, als --conf oder im Code festlegen.

Siehe auch: 

https://issues.Apache.org/jira/browse/SPARK-22618

https://issues.Apache.org/jira/browse/SPARK-23806

0
nemeth.io

Ich hatte master as local[n] eingestellt, als ich den Job an Yarn-cluster übergeben hatte.

Setzen Sie beim Ausführen im Cluster nicht master in code, sondern verwenden Sie stattdessen --master.

0
Ketan Keshri