目的
为了检验spark在yarn中运行时任务发生异常时,程序的容错是如何处理的。
背景
在spark程序中,task有失败重试机制(根据 spark.task.maxFailures 配置,默认是4次),当task执行失败时,并不会直接导致整个应用程序down掉,只有在重试了 spark.task.maxFailures 次后任然失败的情况下才会使程序down掉。另外,spark on yarn模式还会受yarn的重试机制去重启这个spark程序,根据 yarn.resourcemanager.am.max-attempts 配置(默认是2次)。
即使spark程序task失败4次后,受yarn控制重启后在第4次执行成功了,一切都好像没有发生,我们只有通过spark的监控UI去看是否有失败的task,若有还得去查找看是哪个task由于什么原因失败了。基于以上原因,我们需要做个task失败的监控,只要失败就带上错误原因通知我们,及时发现问题,促使我们的程序更加健壮。
测试结果
spark 2.0.0
发布模式 | 程序模式 | 处理 |
---|---|---|
yarn-client | batch | 程序发生异常会task重试4次后结束运行,但在yarn界面程序FinalStatus为成功 |
yarn-client | stream | 程序发生异常task重试4次但不会结束运行,程序继续执行 |
yarn-cluster | batch/stream | 程序发生异常task重试4次后,会根据yarn的配置程序重试次数重启程序,超过 重试次数依旧失败会退出程序,在yarn界面程序FinalStatus为FAILD |
standalone-cluster/client | stream | 程序发生异常task重试4次后结束运行,Driver状态FAILD,Application状态显示FINISHED(前提是没有访问过application UI界面,若访问过UI executor抛错则不会引起程序的结束,应该是spark2.0的bug) |
本版本建议执行方式 yarn-cluster
spark 2.3.0
发布模式 | 程序模式 | 处理 |
---|---|---|
yarn-client | stream | 异常重试4次,程序自动退出FinalStatus为成功(前提是没有访问过application UI界面,若访问过UI executor抛错则不会引起程序的结束) |
yarn-cluster | stream | 异常重试4次,会根据yarn的配置程序重试次数重启程序,超过 重试次数依旧失败会退出程序,在yarn界面程序FinalStatus为FAILD |
standalone-cluster | stream | 异常重试4次,程序自动退出Driver状态FAILD |
standalone-client | stream | - |
网友评论