Scenario: RpcTimeoutException voor Apache Spark thrift-server in Azure HDInsight

In dit artikel worden stappen beschreven voor probleemoplossing en mogelijke oplossingen voor problemen bij het gebruik van Apache Spark-onderdelen in Azure HDInsight-clusters.

Probleem

Spark-toepassing mislukt met een org.apache.spark.rpc.RpcTimeoutException uitzondering en een bericht: Futures timed out, zoals in het volgende voorbeeld:

org.apache.spark.rpc.RpcTimeoutException: Futures timed out after [120 seconds]. This timeout is controlled by spark.rpc.askTimeout
 at org.apache.spark.rpc.RpcTimeout.org$apache$spark$rpc$RpcTimeout$$createRpcTimeoutException(RpcTimeout.scala:48)

OutOfMemoryError en overhead limit exceeded fouten kunnen ook worden weergegeven in de sparkthriftdriver.log zoals in het volgende voorbeeld:

WARN  [rpc-server-3-4] server.TransportChannelHandler: Exception in connection from /10.0.0.17:53218
java.lang.OutOfMemoryError: GC overhead limit exceeded

Oorzaak

Deze fouten worden veroorzaakt door een gebrek aan geheugenbronnen tijdens de gegevensverwerking. Als het Java-proces voor garbagecollection wordt gestart, kan dit ertoe leiden dat de Spark-toepassing niet meer reageert. Er treedt een time-out op voor query's en de verwerking wordt gestopt. De Futures timed out fout geeft aan dat een cluster onder zware stress staat.

Oplossing

Vergroot de clustergrootte door meer werkknooppunten toe te voegen of de geheugencapaciteit van de bestaande clusterknooppunten te vergroten. U kunt de gegevenspijplijn ook aanpassen om de hoeveelheid gegevens die in één keer wordt verwerkt te verminderen.

De spark.network.timeout bepaalt de time-out voor alle netwerkverbindingen. Het verhogen van de netwerktime-out kan meer tijd in rekening laten voor het voltooien van bepaalde kritieke bewerkingen, maar hiermee wordt het probleem niet volledig opgelost.

Volgende stappen

Als u het probleem niet ziet of als u het probleem niet kunt oplossen, gaat u naar een van de volgende kanalen voor meer ondersteuning: