Spark - ERROR Executor: Exception in tjava.lang.OutOfMemoryError: unable to create new native thread
Posted bluishglc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark - ERROR Executor: Exception in tjava.lang.OutOfMemoryError: unable to create new native thread相关的知识,希望对你有一定的参考价值。
如果你的Spark程序在执行过程中报出如下类似的错误:
ERROR Executor: Exception in task xxx in stage xxx
java.lang.OutOfMemoryError: unable to create new native thread
那么可能性非常大的原因是你当前通过spark-submit或spark-sql启动的程序中开启了过多的进程,以至超过了操作系统对当前用户所允许打开的进程数的上限。确定这个问题的方法是这样的:
首先,通过命令:
ulimit -u
来查看一下系统允许的当前用户能开启的进程数,默认值是1024。
然后,我们通过如下这样一条命令来持续追踪当前用户开启的进程数
while true;do ps -u your-user-name -L | wc -l;sleep 1;done
接下就可以启动的我们Spark程序然后观察进程数量的变化了,如果发现进程数量持续上涨,并且在超过了进程上限之后抛出了OOM异常,那么就可以直接判定是用户的所能开启的进程数量收受限了。
那么什么情况会导致spark在执行过程中开启大量的进程呢?一个可能的原因是由于数据的“无序”性,导致shuffle过程开销过大。
以上是关于Spark - ERROR Executor: Exception in tjava.lang.OutOfMemoryError: unable to create new native thread的主要内容,如果未能解决你的问题,请参考以下文章
ERROR executor.CoarseGrainedExecutorBackend: RECEIVED SIGNAL TERM
spark-submit提交任务时报错,Error initializing SparkContext
spark模型error java.lang.IllegalArgumentException: Row length is 0
“spark.yarn.executor.memoryOverhead”设置的值?
spark-submit 中的 num-executors、executor-cores、executor-memory 与 spark.read 中的 option(“numPartitions”,