从checkpoint恢复spark应用的限制
问题
Spark应用可以从checkpoint恢复,用于从上次任务中断处继续往下执行,以保证数据不丢失。但是,在某些情况下,从checkpoint恢复应用会失败。
回答
由于checkpoint中包含了spark应用的对象序列化信息、task执行状态信息、配置信息等,因此,当存在以下问题时,从checkpoint恢复spark应用将会失败。
- 业务代码变更且变更类未明确指定SerialVersionUID。
- spark内部类变更,且变更类未明确指定SerialVersionUID。
另外,由于checkpoint保存了部分配置项,因此可能导致业务修改了部分配置项后,从checkpoint恢复时,配置项依然保持为旧值的情况。当前只有以下部分配置会在从checkpoint恢复时重新加载。
"spark.yarn.app.id", "spark.yarn.app.attemptId", "spark.driver.host", "spark.driver.bindAddress", "spark.driver.port", "spark.master", "spark.yarn.jars", "spark.yarn.keytab", "spark.yarn.principal", "spark.yarn.credentials.file", "spark.yarn.credentials.renewalTime", "spark.yarn.credentials.updateTime", "spark.ui.filters", "spark.mesos.driver.frameworkId", "spark.yarn.jars"
解决方法
手动删除checkpoint目录,重启业务程序。
删除文件为高危操作,在执行操作前请务必确认对应文件是否不再需要。