RequestBodyTooLarge wordt weergegeven in het logboek van de Apache Spark Streaming-toepassing in HDInsight

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

Probleem

U ontvangt onderstaande fouten in een Apache Spark Streaming-toepassingslogboek

NativeAzureFileSystem ... RequestBodyTooLarge

of

java.io.IOException: Operation failed: "The request body is too large and exceeds the maximum permissible limit.", 413, PUT, https://<storage account>.dfs.core.windows.net/<container>/hdp/spark2-events/application_1620341592106_0004_1.inprogress?action=flush&retainUncommittedData=false&position=9238349177&close=false&timeout=90, RequestBodyTooLarge, "The request body is too large and exceeds the maximum permissible limit. RequestId:0259adb6-101f-0041-0660-43f672000000 Time:2021-05-07T16:48:00.2660760Z"
        at org.apache.hadoop.fs.azurebfs.services.AbfsOutputStream.flushWrittenBytesToServiceInternal(AbfsOutputStream.java:362)
        at org.apache.hadoop.fs.azurebfs.services.AbfsOutputStream.flushWrittenBytesToService(AbfsOutputStream.java:337)
        at org.apache.hadoop.fs.azurebfs.services.AbfsOutputStream.flushInternal(AbfsOutputStream.java:272)
        at org.apache.hadoop.fs.azurebfs.services.AbfsOutputStream.hflush(AbfsOutputStream.java:230)
        at org.apache.hadoop.fs.FSDataOutputStream.hflush(FSDataOutputStream.java:134)
        at org.apache.spark.scheduler.EventLoggingListener$$anonfun$logEvent$3.apply(EventLoggingListener.scala:144)
        at org.apache.spark.scheduler.EventLoggingListener$$anonfun$logEvent$3.apply(EventLoggingListener.scala:144)
        at scala.Option.foreach(Option.scala:257)
        at org.apache.spark.scheduler.EventLoggingListener.logEvent(EventLoggingListener.scala:144)

Oorzaak

Bestanden die zijn gemaakt via het ABFS-stuurprogramma maken blok-blobs in Azure Storage. Uw Spark-gebeurtenislogboekbestand bereikt waarschijnlijk de bestandslengtelimiet voor WASB. Zie 50.000 blokken die een blok-blob maximaal kan bevatten.

In Spark 2.3 genereert elke Spark-app één Spark-gebeurtenislogboekbestand. Het Spark-gebeurtenislogboekbestand voor een Spark-streaming-app blijft groeien terwijl de app wordt uitgevoerd. Vandaag heeft een bestand op WASB een bloklimiet van 50000 en is de standaardblokgrootte 4 MB. In de standaardconfiguratie is de maximale bestandsgrootte dus 195 GB. Echter, Azure Storage heeft de maximale blokgrootte verhoogd naar 100 MB, waardoor de limiet voor één bestand effectief is gebracht op 4,75 TB. Zie Schaalbaarheids- en prestatiedoelen voor blob-opslag voor meer informatie.

Oplossing

Er zijn vier oplossingen beschikbaar voor deze fout:

  • Verhoog de blokgrootte tot 100 MB. Wijzig de HDFS-configuratie-eigenschap fs.azure.write.request.size (of maak deze in sectie) in Custom core-site de Ambari-gebruikersinterface. Stel de eigenschap in op een grotere waarde, bijvoorbeeld: 33554432. Sla de bijgewerkte configuratie op en start de betrokken onderdelen opnieuw op.

  • Stop de spark-streamingtaak regelmatig en verzend deze opnieuw.

  • HDFS gebruiken om Spark-gebeurtenislogboeken op te slaan. Het gebruik van HDFS voor opslag kan leiden tot verlies van Spark-gebeurtenisgegevens tijdens het schalen van clusters of Azure-upgrades.

    1. Breng wijzigingen aan in spark.eventlog.dir en spark.history.fs.logDirectory via de Ambari-gebruikersinterface:

      spark.eventlog.dir = hdfs://mycluster/hdp/spark2-events
      spark.history.fs.logDirectory = "hdfs://mycluster/hdp/spark2-events"
      
    2. Mappen maken in HDFS:

      hadoop fs -mkdir -p hdfs://mycluster/hdp/spark2-events
      hadoop fs -chown -R spark:hadoop hdfs://mycluster/hdp
      hadoop fs -chmod -R 777 hdfs://mycluster/hdp/spark2-events
      hadoop fs -chmod -R o+t hdfs://mycluster/hdp/spark2-events
      
    3. Start alle betrokken services opnieuw via de Ambari-gebruikersinterface.

  • Toevoegen --conf spark.hadoop.fs.azure.enable.flush=false in spark-submit om automatisch leegmaken uit te schakelen

Volgende stappen

Als u uw probleem niet hebt gezien of uw probleem niet kunt oplossen, gaat u naar een van de volgende kanalen voor meer ondersteuning:

  • Krijg antwoorden van Azure-experts via azure Community-ondersteuning.

  • Verbinding maken met @AzureSupport - het officiële Microsoft Azure-account voor het verbeteren van de klantervaring. De Azure-community verbinden met de juiste resources: antwoorden, ondersteuning en experts.

  • Als u meer hulp nodig hebt, kunt u een ondersteuningsaanvraag indienen via de Azure Portal. Selecteer Ondersteuning in de menubalk of open de Help + ondersteuningshub . Zie Een ondersteuning voor Azure aanvraag maken voor meer gedetailleerde informatie. Toegang tot ondersteuning voor abonnementsbeheer en facturering is opgenomen in uw Microsoft Azure-abonnement en technische ondersteuning wordt geboden via een van de Azure-ondersteuningsplannen.