2017-12-22 58 views
0

私はスパークストリーミングジョブを実行しており、ストリーミング入力は3時間ごとに約50MBです。ジョブは最初の数時間で少数のファイルを処理しました。しかし突然、次のエラーで失敗しました。エラーが発生した場合、入力は受信されませんでした。スパークジョブが新しい​​スレッドを作成できませんでした。スパークストリーミングジョブが「java.lang.OutOfMemoryError:新しいネイティブスレッドを作成できません」

私はビジネスロジックのRDDをキャッシュしていますが、新しいスレッドが新しい入力ファイルごとに作成されるため、問題はありません。したがって、キャッシュされたRDDは、スレッドが終了すると破棄されます。

誰でもこれを手伝うことができますか?私はたくさん試しましたが、問題を推測できませんでした。

エラーメッセージ:

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 

答えて

0

using the Linux toolstack、密接にあなたのアプリケーションを監視します。これは、開いているスレッドの数を超えているため、Linuxカーネルによって強制され、プロセスを強制終了するユーザ/システム制限のケースです。その制限を大きくすることはできますが、潜在的にコード内にスレッドが漏れている可能性もあります。

たとえば、システム変数とユーザー変数の管理方法については、this answerを参照してください。

+0

ありがとうございます。総スレッドが限界を超えていることがわかりました。しかし、ストリーミングジョブはスレッドを増やし続けるでしょうか?そして、実行されている古いスレッドも開催されますか? – Sankarlal

+0

これはあなたが見つけ出すためのものであり、あなたのロジックに依存します。私は自分の答えを監視する手段を改正した。 –

関連する問題