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会进入重试,可以保证任务最终可以执行完成,不会对业务产生影响。