更新时间:2022-09-30 GMT+08:00

Executor进程Crash导致Stage重试

问题

在执行大数据量的Spark任务(如100T的TPCDS测试套)过程中,有时会出现Executor丢失从而导致Stage重试的现象。查看Executor的日志,出现“Executor 532 is lost rpc with driver,but is still alive, going to kill it”所示信息,表明Executor丢失是由于JVM Crash导致的。

JVM的关键Crash错误日志,如下:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (sharedRuntime.cpp:834), pid=241075, tid=140476258551552
#  fatal error: exception happened outside interpreter, nmethods and vtable stubs at pc 0x00007fcda9eb8eb1

回答

上述问题在Oracle官网上有类似的情况,该问题现象是Oracle JVM的缺陷,并不是平台代码引入的问题,且Spark中有对Executor的容错机制,Executor Crash之后,Stage会进入重试,可以保证任务最终可以执行完成,不会对业务产生影响。