spark容错机制







集群容错机制




Master异常退出后重启:


不影响退出之前已经提交的application的运行,但是在退出期间exector的资源释放,异常退出重新调度等功能会受到影响;


新的appliaction无法提交;


重新启动后原来的已经创建的应用信息和driver信息不会重新上报到master,原有的worker依然会通过heartbeat心跳信息上报,worker检测到master的退出,会重新发出注册的请求RegisterWorker




zookeeper异常:


active异常后,原先处于standby的会获取到znode的权限成为active节点,同时会进行recover操作加载持久层的信息,知会到application,worker上报最新的信息到master;如果一段时间内未接受相应的response(超时时间由spark.worker.timeout指定),master会移除掉响应的进程信息,同时开启新一轮的schedule为需要的application分配executor


HA切换成功后,spark集群依然能对外提供服务,支持应用提交和exector的调度。




worker节点网络故障:


网络故障导致心跳长时间不上报给master,经过spark.worker.timeout时间后(默认是60s),master检测到worker异常,标识为DEAD状态,同时移除掉worker信息及其上面的executor信息,跟上一节点处理逻辑类似,worker的信息依然会在页面上显示,直到超过时间(spark.dead.worker.persistence+1) * spark.worker.timeout后才将其彻底删除


CoarseGrainedExecutorBackend由于和worker的通信进程,不会有任何影响


一段时间后网络恢复,worker成功发送心跳,master收到心跳后,未超过时间(spark.dead.worker.persistence+1) * spark.worker.timeout,知会worker重新进行注册;但是此时worker上的executor不会再一并上报上来


executor异常退出:


exector异常退出,如被kill-9,同机器上的worker进程的ExecutorRunner检测到executor进程的退出,触发ExecutorStateChanged事件给worker,worker移除掉内存中保存的有关executor的信息,同时转发消息给master,master收到消息后,移除掉application对应的executor信息,同时开始新一轮的schedule为application分配新的executor。


application异常退出:


application异常退出,CoarseGrainedExecutorBackend检测到后触发进程退出操作


master检测到和application的连接断裂,移除掉内存以及persist中保存的应用的信息




---------------------------------------------------------
---------------------------------------------------------






代码容错机制 :


一般来说,分布式数据集的容错性有两种方式:数据检查点和记录数据的更新。


面向大规模数据分析,数据检查点操作成本很高,需要通过数据中心的网络连接在机器之间复制庞大的数据集,


而网络带宽往往比内存带宽低的多,同事还需要消耗更多的存储资源。




-----------------------------------------------------------------




spark:


容错机制: 记录数据的更新


假设数据的粒度很细太多,那么记录数据的更新成本也很高。


因此,RDD只支持粗粒度的转换,即只记录单个块上执行的单个操作,然后将创建RDD的一系列转换序列(每个RDD都包含了它是如何由其他RDD转换过来的,以及如何重建某一块数据的信息。RDD的容错机制又称Lineage容错)记录下来,以便恢复丢失的分区。




Lineage机制


RDD的Lineage记录的是粗粒度的特定数据Tranformation操作(如filter,map,join等)。当这个RDD的部分分区数据丢失时,可通过Lineage获取足够的信息来重新计算从而恢复丢失的分区数据。


spark的容错是RDD级别的,是粗粒度的数据模型,所有有以下影响:
  1)相比细粒的的数据模型,得到了性能的提升
  2)对实时性要要求高的场景不适合






容错原理:




在容错机制中,如果一个节点死机了,1)运算窄依赖,则只要把丢失的父RDD分区重算即可,假设父RDD与该RDD在同一节点,则寻找父父RDD,一次网上类推,找到为为挂掉的N父RDD重新计算,假设都是窄依赖,则不存在冗余计算。2)运算宽依赖,丢失一个子RDD分区重算的每个父RDD的每个分区的所有数据并不是都丢给丢失的子RDD分区用的,会同时分配到其他子RDD计算。所以所有的子RDD都需要重新计算,故产生冗余计算的开销,这也是宽依赖开销更大的原因。






RDD容错机制: checkpoint机制


根据上面容错原理的介绍:宽依赖与窄依赖


checkpoint需要考虑两点:
1)DAG中Lineage的长度,如果过长,重新计算则开销太大。
2)由于宽依赖开销更大,所以在宽依赖上做checkpoint受益更大。











你可能感兴趣的:(spark容错机制)