2017-12-22 40 views
0

Ich habe einen Spark-Streaming-Job ausgeführt und der Streaming-Eingang beträgt alle 3 Stunden ca. 50 MB. Der Job hat in den ersten Stunden wenige Dateien verarbeitet. Aber plötzlich scheiterte der folgende Fehler. Wenn der Fehler aufgetreten ist, wurde keine Eingabe empfangen. Der Funke-Job konnte keinen neuen Thread erstellen.Spark-Streaming-Auftrag ist fehlgeschlagen mit "java.lang.OutOfMemoryError: neuer nativer Thread kann nicht erstellt werden"

Ich habe die RDDs in der Geschäftslogik zwischengespeichert - Aber das sollte kein Problem sein, da ein neuer Thread für jede neue Eingabedateien erstellt wird. So wird die zwischengespeicherte RDD zerstört, wenn der Thread endet.

Kann mir jemand dabei helfen? Ich habe viel versucht, konnte das Problem aber nicht erraten.

Fehlermeldung:

17/12/21 15:32:31 INFO ContextCleaner: Cleaned RDD 9612 
17/12/21 15:32:32 INFO CheckpointWriter: Saving checkpoint for time 1513869975000 ms to file 'hdfs://EAPROD/EA/supplychain/process/checkpoints/logistics/elf/eventsCheckpoint/checkpoint-1513869990000' 
Exception in thread "dispatcher-event-loop-12" Exception in thread "dispatcher-event-loop-31" java.lang.OutOfMemoryError: unable to create new native thread 
     at java.lang.Thread.start0(Native Method) 
     at java.lang.Thread.start(Thread.java:714) 
     at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:950) 
     at java.util.concurrent.ThreadPoolExecutor.processWorkerExit(ThreadPoolExecutor.java:1018) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1160) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at java.lang.Thread.run(Thread.java:745) 
Exception in thread "pool-28-thread-1" 17/12/21 15:32:32 INFO CheckpointWriter: Submitted checkpoint of time 1513869975000 ms writer queue 

Antwort

0

Ihre Anwendung überwachen eng, using the Linux toolstack. Dies ist ein Fall, in dem ein Benutzer/System-Limit vom Linux-Kernel erzwungen wird und Ihren Prozess beendet, da die Anzahl der offenen Threads überschritten wurde. Sie können dieses Limit erhöhen, aber möglicherweise führen Sie auch Threads in Ihrem Code aus.

Siehe zum Beispiel this answer zum Verwalten der System- und Benutzervariablen.

+0

Danke für die Eingabe. Ich habe gehört, dass der Gesamt-Thread das Limit überschreitet. Aber wird der Streaming-Job die Threads erhöhen? Und alte Threads, die ausgeführt werden, werden auch gehalten? – Sankarlal

+0

Das ist für Sie herauszufinden und hängt von Ihrer Logik ab. Ich habe ein Mittel zur Überwachung auf meine Antwort geändert. –

Verwandte Themen