Apache Scintilla s3a committer - stack del thread - problemi di memoria insufficiente

0

Domanda

Ho davvero bisogno di qualche aiuto qui:

Stiamo usando Spark3.1.2 utilizzo autonomo cluster. Dal momento che abbiamo iniziato a usare la s3a directory committer, la nostra scintilla di posti di lavoro di prestazioni e stabilità, è cresciuto in modo significativo!

Ultimamente però si sono completamente sconcertato risoluzione di questo s3a directory committer problema per giorni e giorni, e mi chiedo se avete idea di cosa sta succedendo?

La nostra scintilla di posti di lavoro non riuscire a causa di Java OOM (o, piuttosto, il processo di limite di errore:

 An error occurred while calling None.org.apache.spark.api.java.JavaSparkContext.

: java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
    at java.base/java.lang.Thread.start0(Native Method)
    at java.base/java.lang.Thread.start(Thread.java:803)
    at java.base/java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:937)
    at java.base/java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1343)
    at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
    at java.base/java.util.concurrent.Executors$DelegatedExecutorService.submit(Executors.java:714)
    at org.apache.spark.rpc.netty.DedicatedMessageLoop.$anonfun$new$1(MessageLoop.scala:174)
    at org.apache.spark.rpc.netty.DedicatedMessageLoop.$anonfun$new$1$adapted(MessageLoop.scala:173)
    at scala.collection.immutable.Range.foreach(Range.scala:158)
    at org.apache.spark.rpc.netty.DedicatedMessageLoop.<init>(MessageLoop.scala:173)
    at org.apache.spark.rpc.netty.Dispatcher.liftedTree1$1(Dispatcher.scala:75)
    at org.apache.spark.rpc.netty.Dispatcher.registerRpcEndpoint(Dispatcher.scala:72)
    at org.apache.spark.rpc.netty.NettyRpcEnv.setupEndpoint(NettyRpcEnv.scala:136)
    at org.apache.spark.storage.BlockManager.<init>(BlockManager.scala:231)
    at org.apache.spark.SparkEnv$.create(SparkEnv.scala:394)
    at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:189)
    at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:277)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:458)
    at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:58)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:247)
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
    at py4j.Gateway.invoke(Gateway.java:238)
    at py4j.commands.ConstructorCommand.invokeConstructor(ConstructorCommand.java:80)
    at py4j.commands.ConstructorCommand.execute(ConstructorCommand.java:69)
    at py4j.GatewayConnection.run(GatewayConnection.java:238)
    at java.base/java.lang.Thread.run(Thread.java:834)

Scintilla Thread Dump mostra oltre 5000 committer thread su la scintilla driver! Ecco un esempio:

Thread ID   Thread Name Thread State    Thread Locks
1047    s3-committer-pool-0 WAITING 
1449    s3-committer-pool-0 WAITING 
1468    s3-committer-pool-0 WAITING 
1485    s3-committer-pool-0 WAITING 
1505    s3-committer-pool-0 WAITING 
1524    s3-committer-pool-0 WAITING 
1529    s3-committer-pool-0 WAITING 
1544    s3-committer-pool-0 WAITING 
1549    s3-committer-pool-0 WAITING 
1809    s3-committer-pool-0 WAITING 
1972    s3-committer-pool-0 WAITING 
1998    s3-committer-pool-0 WAITING 
2022    s3-committer-pool-0 WAITING 
2043    s3-committer-pool-0 WAITING 
2416    s3-committer-pool-0 WAITING 
2453    s3-committer-pool-0 WAITING 
2470    s3-committer-pool-0 WAITING 
2517    s3-committer-pool-0 WAITING 
2534    s3-committer-pool-0 WAITING 
2551    s3-committer-pool-0 WAITING 
2580    s3-committer-pool-0 WAITING 
2597    s3-committer-pool-0 WAITING 
2614    s3-committer-pool-0 WAITING 
2631    s3-committer-pool-0 WAITING 
2726    s3-committer-pool-0 WAITING 
2743    s3-committer-pool-0 WAITING 
2763    s3-committer-pool-0 WAITING 
2780    s3-committer-pool-0 WAITING 
2819    s3-committer-pool-0 WAITING 
2841    s3-committer-pool-0 WAITING 
2858    s3-committer-pool-0 WAITING 
2875    s3-committer-pool-0 WAITING 
2925    s3-committer-pool-0 WAITING 
2942    s3-committer-pool-0 WAITING 
2963    s3-committer-pool-0 WAITING 
2980    s3-committer-pool-0 WAITING 
3020    s3-committer-pool-0 WAITING 
3037    s3-committer-pool-0 WAITING 
3055    s3-committer-pool-0 WAITING 
3072    s3-committer-pool-0 WAITING 
3127    s3-committer-pool-0 WAITING 
3144    s3-committer-pool-0 WAITING 
3163    s3-committer-pool-0 WAITING 
3180    s3-committer-pool-0 WAITING 
3222    s3-committer-pool-0 WAITING 
3242    s3-committer-pool-0 WAITING 
3259    s3-committer-pool-0 WAITING 
3278    s3-committer-pool-0 WAITING 
3418    s3-committer-pool-0 WAITING 
3435    s3-committer-pool-0 WAITING 
3452    s3-committer-pool-0 WAITING 
3469    s3-committer-pool-0 WAITING 
3486    s3-committer-pool-0 WAITING 
3491    s3-committer-pool-0 WAITING 
3501    s3-committer-pool-0 WAITING 
3508    s3-committer-pool-0 WAITING 
4029    s3-committer-pool-0 WAITING 
4093    s3-committer-pool-0 WAITING 
4658    s3-committer-pool-0 WAITING 
4666    s3-committer-pool-0 WAITING 
4907    s3-committer-pool-0 WAITING 
5102    s3-committer-pool-0 WAITING 
5119    s3-committer-pool-0 WAITING 
5158    s3-committer-pool-0 WAITING 
5175    s3-committer-pool-0 WAITING 
5192    s3-committer-pool-0 WAITING 
5209    s3-committer-pool-0 WAITING 
5226    s3-committer-pool-0 WAITING 
5395    s3-committer-pool-0 WAITING 
5634    s3-committer-pool-0 WAITING 
5651    s3-committer-pool-0 WAITING 
5668    s3-committer-pool-0 WAITING 
5685    s3-committer-pool-0 WAITING 
5702    s3-committer-pool-0 WAITING 
5722    s3-committer-pool-0 WAITING 
5739    s3-committer-pool-0 WAITING 
6144    s3-committer-pool-0 WAITING 
6167    s3-committer-pool-0 WAITING 
6289    s3-committer-pool-0 WAITING 
6588    s3-committer-pool-0 WAITING 
6628    s3-committer-pool-0 WAITING 
6645    s3-committer-pool-0 WAITING 
6662    s3-committer-pool-0 WAITING 
6675    s3-committer-pool-0 WAITING 
6692    s3-committer-pool-0 WAITING 
6709    s3-committer-pool-0 WAITING 
7049    s3-committer-pool-0 WAITING 

Questa è la considerazione che il nostro impostazioni non consentono più di 100 thread... O non riusciamo a capire qualcosa...

Ecco le nostre configurazioni e impostazioni:

fs.s3a.threads.max  100 
fs.s3a.connection.maximum  1000 
fs.s3a.committer.threads 16   
fs.s3a.max.total.tasks  5
fs.s3a.committer.name   directory
fs.s3a.fast.upload.buffer                 disk
io.file.buffer.size                                1048576
mapreduce.outputcommitter.factory.scheme.s3a    - org.apache.hadoop.fs.s3a.commit.S3ACommitterFactory

Ci aveva provato con diverse versioni di la scintilla Hadoop cloud library, ma la questione è sempre la stessa.

https://repository.cloudera.com/content/repositories/releases/org/apache/spark/spark-hadoop-cloud_2.11/2.4.0-cdh6.3.2/spark-hadoop-cloud_2.11-2.4.0-cdh6.3.2.jar

https://repository.cloudera.com/artifactory/libs-release-local/org/apache/spark/spark-hadoop-cloud_2.11/2.4.0.7.0.3.0-79/spark-hadoop-cloud_2.11-2.4.0.7.0.3.0-79.jar

https://repo1.maven.org/maven2/org/apache/spark/spark-hadoop-cloud_2.12/3.2.0/spark-hadoop-cloud_2.12-3.2.0.jar

https://repository.cloudera.com/artifactory/libs-release-local/org/apache/spark/spark-hadoop-cloud_2.12/3.1.2.7.2.12.0-291/spark-hadoop-cloud_2.12-3.1.2.7.2.12.0-291.jar

Vi saremmo davvero grati se si può punto nella giusta direzione

amazon-s3 apache-spark hadoop java
2021-11-23 16:49:54
2

Migliore risposta

3

Sarà HADOOP-16570 S3A committer perdita di thread/solleva OOM sul lavoro/compito impegnarsi a scala

spostare fino a hadoop-3.3.0 binari per la correzione. Ideale per 3.3.1 per risolvere altri problemi, soprattutto duplicato jobIDs provenienti da scintilla. Non sono sicuro di come molto indietro nella CDH comunicati che la correzione è andato; ho potuto capire se si ha realmente bisogno per ora. Non CDH6.x, certamente

2021-11-28 12:13:50

Grazie mille! Infatti tutto quello che abbiamo fatto, non ha aiutato.
Ofer Eliassaf

Il nostro problema adesso è che cercando i driver corretti - dove possiamo recuperare scintilla-cloud vaso con la versione pertinente? Questo driver lavori per la Scintilla 3.1.2: mvnrepository.com/artifact/org.apache.spark/... ??
Ofer Eliassaf

la scintilla cloud barattolo deve essere quello del tuo scintilla distro; è solo un sottile associazione di classe
stevel

Ciao, stiamo cercando di attivare questa opzione in Scintilla 3.1.2 che viene fornito in bundle con Hadoop 3.2. È sicuro di fornire scintilla-hadoop-cloud per 3.3.1 insieme con Hadoop 3.2 librerie? (Stiamo cercando di andare con l'abbinata versione e ho avuto qualche diffuculties con Zookeeper curatore librerie di mancata corrispondenza di Guava. una pista più veloce sarà quello di andare con il bundle e basta aggiungere la comitter del 3.3.1. Funzionerà?). Grazie!
Ofer Eliassaf

utilizzare la scintilla-hadoop-cloud-3.1.2; avrete bisogno di un set completo di hadoop-3.3.x in perfetta sincronia. o backport committer patch solo per hadoop 3.2
stevel

Questa scintilla-hadoop-cloud-3.1.2 ha questo bug (ed è stato un incubo per trovare quanto non è ufficiale maven versioni). Quello che abbiamo finito per fare è: Opzione 1 (il nostro attuale programma di installazione): Utilizzare spark 3.1.2 abbinata versione. Abbiamo aggiunto Hadoop 3.3.1 binari Abbiamo aggiunto la scintilla-hadoop-cloud-3.2.0 per risolvere il committer problema. Opzione 2 (che prenderemo in considerazione): Portare Spark3.1.2 in bundle (che viene fornito con Hadoop 3.2) E aggiungere a scintilla hadoop-cloud-3.2.0 per il fissaggio del comitter issu. Che è migliore a vostro parere?
Ofer Eliassaf

Il filo di dispersione è in hadoop-aws; dovrebbe essere solo hadoop-* che necessita di un aggiornamento.
stevel
1

Checkout questo articolo sul tuning per S3A.

In particolare mi piacerebbe guardare a questo, anche se il suo categorizzato sotto array:

Potrebbe essere necessario eseguire l'attenta messa a punto per ridurre il rischio di esaurire la memoria, soprattutto se i dati sono memorizzati in memoria. Ci sono un il numero di parametri che possono essere regolati:

Il numero totale di thread disponibili nel file system per i dati l'upload o qualsiasi altro in coda filesystem operazione. Questo è impostato in fs.s3a.thread.max.

Il numero di operazioni che possono essere in coda per l'esecuzione, in attesa di un thread. Questo è impostato in fs.s3a.max.totale.attività.

Il numero di blocchi che un unico flusso di output attivi (che è, che viene caricato da un filo o in coda nel filesystem coda di thread). Questo è impostato in fs.s3a.veloce.il caricamento.attivo.i blocchi.

La lunghezza del tempo che un thread inattivo può rimanere nel pool di thread prima è andato in pensione. Questo è impostato in fs.s3a.thread.keepalivetime.

Penso che si potrebbe trovare a ridurre il numero di thread rimuovere la memoria di pressione.

Ho anche consigliamo di sintonizzarsi fs.s3a.fast.upload.active.blocks sarà anche alleviare la pressione della memoria. Penso che ridurre il numero di thread dovrebbe essere la vostra prima mossa 100 è un po ' aggressivo. Probabilmente ridotta larghezza di banda e fili in più non sono suscettibili di fare nulla, ma il consumo di memoria.

2021-11-28 12:08:19

Sapete qual è il driver thread sono per? Se ho capito bene la configurazione del thread dovrebbe essere per i lavoratori. Quali sono i driver thread?
Ofer Eliassaf

Guarda s3 committer documentazione.(Non al 100%, lo stesso di questo, ma un buon posto per conoscere s3 & scintilla) LInk qui sotto. Si solleva l'idea che i file sono comunicati al conducente, e che sono impegnati. Non possiamo sapere questo è lo stesso per il file di scrittura, ma sembra logico, dato che il driver è l'unico a conoscenza del lavoro di riuscita/non riuscita. Non ho trovato una pistola fumante, sostenendo che questo è il vero, ma sembra ragionevole/plausibile. github.com/apache/hadoop/blob/trunk/hadoop-tools/hadoop-aws/src/...
Matt Andruff

Questo avrebbe anche senso perché con 100 thread per lavoratore potrebbe finire con 5000 thread del driver e perché di nuovo si dovrebbe considerare l'utilizzo di un numero che non aggiungere troppa pressione sul driver. (ridurre il numero di thread)
Matt Andruff

guarda la risposta di @Stevel - è un noto hadoop bug con le versioni precedenti dei committer!
Ofer Eliassaf

La ringrazio molto per il ping me.
Matt Andruff

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................