A RequestBodyTooLarge megjelenik az Apache Spark Streaming alkalmazásnaplójában a HDInsightban
Ez a cikk az Apache Spark-összetevők Azure HDInsight-fürtökben való használatakor felmerülő problémák hibaelhárítási lépéseit és lehetséges megoldásait ismerteti.
Probléma
Az apache Spark Streaming-alkalmazásnaplóban az alábbi hibák jelennek meg
NativeAzureFileSystem ... RequestBodyTooLarge
Vagy
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)
Ok
Az ABFS-illesztőprogramon keresztül létrehozott fájlok blokkblobokat hoznak létre az Azure Storage-ban. A Spark-esemény naplófájlja valószínűleg eléri a WASB fájlhossz-korlátját. Lásd : 50 000 blokk, amelyet egy blokkblob maximálisan képes tárolni.
A Spark 2.3-ban minden Spark-alkalmazás létrehoz egy Spark-eseménynapló-fájlt. A Spark-streamelési alkalmazások Spark-eseménynapló-fájlja továbbra is növekszik az alkalmazás futása közben. Ma egy WASB-fájlra 50000 blokkkorlát vonatkozik, az alapértelmezett blokkméret pedig 4 MB. Az alapértelmezett konfigurációban tehát a maximális fájlméret 195 GB. Az Azure Storage azonban 100 MB-ra növelte a maximális blokkméretet, ami gyakorlatilag 4,75 TB-ra növelte az egyetlen fájlkorlátot. További információ: A Blob Storage méretezhetőségi és teljesítménycéljai.
Feloldás
Ehhez a hibához négy megoldás érhető el:
Növelje a blokkméretet 100 MB-ra. Az Ambari felhasználói felületén módosítsa a HDFS konfigurációs tulajdonságát
fs.azure.write.request.size
(vagy hozza létre a szakaszbanCustom core-site
). Állítsa a tulajdonságot egy nagyobb értékre, például: 33554432. Mentse a frissített konfigurációt, és indítsa újra az érintett összetevőket.Rendszeres időközönként állítsa le és küldje el újra a spark-streaming feladatot.
A HDFS használatával Spark-eseménynaplókat tárolhat. A HDFS tárolóhoz való használata a Spark-eseményadatok elvesztését eredményezheti a fürtméretezés vagy az Azure-frissítések során.
Végezze el a módosításokat
spark.history.fs.logDirectory
azspark.eventlog.dir
Ambari felhasználói felületén keresztül:spark.eventlog.dir = hdfs://mycluster/hdp/spark2-events spark.history.fs.logDirectory = "hdfs://mycluster/hdp/spark2-events"
Címtárak létrehozása HDFS-en:
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
Indítsa újra az összes érintett szolgáltatást az Ambari felhasználói felületén keresztül.
Hozzáadás
--conf spark.hadoop.fs.azure.enable.flush=false
a spark-submitben az automatikus kiürítés letiltásához
Következő lépések
Ha nem látja a problémát, vagy nem tudja megoldani a problémát, további támogatásért látogasson el az alábbi csatornák egyikére:
Azure-szakértőktől kaphat válaszokat az Azure Közösségi támogatáson keresztül.
Csatlakozzon a @AzureSupport - a hivatalos Microsoft Azure-fiókhoz az ügyfélélmény javításához. Az Azure-közösség csatlakoztatása a megfelelő erőforrásokhoz: válaszok, támogatás és szakértők.
Ha további segítségre van szüksége, küldjön támogatási kérést a Azure Portal. A menüsávon válassza a Támogatás lehetőséget, vagy nyissa meg a Súgó + támogatási központot. További információ: Azure-támogatás kérés létrehozása. Az előfizetés-kezeléshez és a számlázási támogatáshoz való hozzáférés a Microsoft Azure-előfizetés részét képezi, a technikai támogatás pedig az Egyik Azure-támogatási csomagon keresztül érhető el.