RequestBodyTooLarge viene visualizzato nel log dell'applicazione Apache Spark Streaming in HDInsight
Questo articolo descrive le procedure di risoluzione dei problemi e le possibili soluzioni per i problemi relativi all'uso di componenti Apache Spark nei cluster Azure HDInsight.
Problema
Si riceveranno gli errori seguenti in un log dell'applicazione Apache Spark Streaming
NativeAzureFileSystem ... RequestBodyTooLarge
Oppure
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)
Causa
I file creati tramite il driver ABFS creano BLOB bloccati nell'archiviazione di Azure. Il file di log eventi Spark raggiunge probabilmente il limite di lunghezza del file per WASB. Vedere 50.000 blocchi che un BLOB a blocchi può contenere al massimo.
In Spark 2.3 ogni app Spark genera un file di log eventi Spark. Il file di log eventi Spark per un'app di streaming Spark continua a crescere durante l'esecuzione dell'app. Oggi un file in WASB ha un limite di blocco di 50000 e le dimensioni predefinite del blocco sono 4 MB. Quindi, nella configurazione predefinita, le dimensioni massime del file sono 195 GB. Archiviazione di Azure ha tuttavia aumentato le dimensioni massime del blocco fino a 100 MB, che hanno effettivamente portato il limite di file singolo a 4,75 TB. Per altre informazioni, vedere Obiettivi di scalabilità e prestazioni per Archiviazione BLOB.
Risoluzione
Per questo errore sono disponibili quattro soluzioni:
Aumentare le dimensioni del blocco fino a 100 MB. Nell'interfaccia utente di Ambari modificare la proprietà
fs.azure.write.request.size
di configurazione HDFS (o crearla nellaCustom core-site
sezione). Impostare la proprietà su un valore più grande, ad esempio: 33554432. Salvare la configurazione aggiornata e riavviare i componenti interessati.Arrestare periodicamente e inviare nuovamente il processo di streaming spark.
Usare HDFS per archiviare i log eventi Spark. L'uso di HDFS per l'archiviazione può causare la perdita di dati degli eventi Spark durante il ridimensionamento del cluster o gli aggiornamenti di Azure.
Apportare modifiche a
spark.eventlog.dir
espark.history.fs.logDirectory
tramite l'interfaccia utente di Ambari:spark.eventlog.dir = hdfs://mycluster/hdp/spark2-events spark.history.fs.logDirectory = "hdfs://mycluster/hdp/spark2-events"
Creare directory 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
Riavviare tutti i servizi interessati tramite l'interfaccia utente di Ambari.
Aggiungere
--conf spark.hadoop.fs.azure.enable.flush=false
in spark-submit per disabilitare lo scaricamento automatico
Passaggi successivi
Se il problema riscontrato non è presente in questo elenco o se non si riesce a risolverlo, visitare uno dei canali seguenti per ottenere ulteriore assistenza:
Ricevere risposte dagli esperti di Azure tramite la pagina Supporto della community per Azure.
Connettersi con @AzureSupport : l'account ufficiale di Microsoft Azure per migliorare l'esperienza dei clienti. Mette in contatto la community di Azure con le risorse giuste: risposte, supporto ed esperti.
Se serve ulteriore assistenza, è possibile inviare una richiesta di supporto dal portale di Azure. Selezionare Supporto nella barra dei menu o aprire l'hub Guida e supporto. Per informazioni più dettagliate, vedere Come creare una richiesta di supporto in Azure. L'accesso al supporto per la gestione delle sottoscrizioni e la fatturazione è incluso nella sottoscrizione di Microsoft Azure e il supporto tecnico viene fornito tramite uno dei piani di supporto di Azure.