RequestBodyTooLarge visas i Apache Spark Streaming-programloggen i HDInsight

Den här artikeln beskriver felsökningssteg och möjliga lösningar på problem när du använder Apache Spark-komponenter i Azure HDInsight-kluster.

Problem

Du får nedanstående fel i en Apache Spark Streaming-programlogg

NativeAzureFileSystem ... RequestBodyTooLarge

Eller

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)

Orsak

Filer som skapas via ABFS-drivrutinen skapar blockblobar i Azure Storage. Spark-händelseloggfilen når förmodligen fillängdsgränsen för WASB. Se 50 000 block som en blockblob kan innehålla högst.

I Spark 2.3 genererar varje Spark-app en Spark-händelseloggfil. Spark-händelseloggfilen för en Spark-strömningsapp fortsätter att växa medan appen körs. Idag har en fil på WASB en blockgräns på 5 0000 och standardblockstorleken är 4 MB. I standardkonfigurationen är den maximala filstorleken 195 GB. Men Azure Storage har ökat den maximala blockstorleken till 100 MB, vilket i praktiken medförde en gräns på 4,75 TB för enskilda filer. Mer information finns i Skalbarhets- och prestandamål för Blob Storage.

Lösning

Det finns fyra lösningar för det här felet:

  • Öka blockstorleken till upp till 100 MB. I Ambari-användargränssnittet ändrar du hdfs-konfigurationsegenskapen fs.azure.write.request.size (eller skapar den i Custom core-site avsnittet). Ange egenskapen till ett större värde, till exempel: 33554432. Spara den uppdaterade konfigurationen och starta om de komponenter som påverkas.

  • Stoppa och skicka spark-streaming-jobbet regelbundet igen.

  • Använd HDFS för att lagra Spark-händelseloggar. Användning av HDFS för lagring kan resultera i förlust av Spark-händelsedata under klusterskalning eller Azure-uppgraderingar.

    1. Gör ändringar i spark.eventlog.dir och spark.history.fs.logDirectory via Ambari-användargränssnittet:

      spark.eventlog.dir = hdfs://mycluster/hdp/spark2-events
      spark.history.fs.logDirectory = "hdfs://mycluster/hdp/spark2-events"
      
    2. Skapa kataloger på 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. Starta om alla berörda tjänster via Ambari-användargränssnittet.

  • Lägg till --conf spark.hadoop.fs.azure.enable.flush=false spark-submit för att inaktivera automatisk tömning

Nästa steg

Om du inte ser problemet eller inte kan lösa problemet kan du besöka någon av följande kanaler för mer support:

  • Få svar från Azure-experter via Azure Community Support.

  • Anslut med @AzureSupport – den officiella Microsoft Azure står för att förbättra kundupplevelsen. Ansluta Azure-communityn till rätt resurser: svar, support och experter.

  • Om du behöver mer hjälp kan du skicka en supportbegäran från Azure Portal. Välj Support på menyraden eller öppna hubben Hjälp + support . Mer detaljerad information finns i Skapa en Azure Support begäran. Åtkomst till prenumerationshantering och faktureringssupport ingår i din Microsoft Azure-prenumeration och teknisk support tillhandahålls via någon av Azures supportplaner.