我有火花流工作运行,流输入每3小时约50 mb。该工作在最初的几个小时内处理了几个文件。但突然失败,出现以下错误。发生错误时未收到任何输入。火花作业无法创建新线程。
我已经在业务逻辑中缓存了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
密切监控您的申请,using the Linux toolstack。这是Linux内核强制执行用户/系统限制并终止进程的情况,因为已超出开放线程的数量。您可以增加该限制,但可能还会泄漏代码中的线程。
有关如何管理系统和用户变量的信息,请参阅this answer。