Spark 应用程序的高可用性主要包含两个部分:集群环境的高可用以及应用程序的容错特性;集群环境的高可用,主要由集群框架来控制,比如 spark on yarn 模式下的 ResourceManager 的 HA、Spark Standalone 模式下的 Master HA 等特性的设置保障集群的高可用性;至于应用程序的容错需要考虑应用的各个组成部分的容错。
spark 应用程序执行过程中,一般存在以下失败的情况:
Driver 集成宕机:Driver 运行机器宕机、Driver 程序运行过程中异常导致宕机 Executor 进程宕机:Executor 所在的work 宕机,Exector 和 Driver 通信超时 Task 执行失败:task 执行过程发生异常导致失败 Driver 进程宕机解决方案:
监控机器机器是否存活,如果机器宕机,重启服务机器和 spark 集群 通过 spark job 的 history 服务监控应用是否执行成功,如果执行失败,通过开发人员重启服务即可 SparkStreaming 中,重启spark应用后,可通过 checkpoint 进行job数据恢复 Executor 宕机解决方案:选择一个work 节点重启Executor 进程,Driver 重新分配任务
Task 执行失败解决方案:
Spark 会自动进行 task 重试机制,如果某个 task 失败重试次数超过3次(spark.task.maxFailures)后,当前job 执行失败;local 模式默认不启用 task 重试机制 Task 数据恢复/重新运行的机制实际上是 RDD 容错机制,即 Lineage 机制,RDD的 Lineage 机制记录的是粗粒度的特定数据的 Transformation 操作行为。当这个 RDD 的部分数据丢失时,它可以通过 lineage 获取足够的信息来重新运算和恢复丢失的数据分区;该机制体现在RDD上就是RDD依赖特性 如果 rdd 的 lineage 的生命线特别长,此时某些 task 执行失败的恢复成本就会比较高,那么可以采用检查点或缓存的方式将数据冗余下来,当检查点/缓存点之后的rdd的task出现异常的时候,可以直接从检查点重新构建lineage,可以减少执行开销。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。