Spark - ERROR Executor: java.lang.OutOfMemoryError: unable to create new native thread

推荐:博主历时三年倾注大量心血创作的《大数据平台架构与原型实现:数据中台建设实战》一书已由知名IT图书品牌电子工业出版社博文视点出版发行,真诚推荐给每一位读者!点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,扫码进入京东手机购书页面!

在这里插入图片描述

 

 

如果你的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过程开销过大。

你可能感兴趣的:(大数据专题)