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) inCustom 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.
Breng wijzigingen aan in
spark.eventlog.dir
enspark.history.fs.logDirectory
via de Ambari-gebruikersinterface:spark.eventlog.dir = hdfs://mycluster/hdp/spark2-events spark.history.fs.logDirectory = "hdfs://mycluster/hdp/spark2-events"
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
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.