通过Job Committer保证Mapreduce/Spark任务数据一致性
Spark支持MapReduce的JobCommitter,同样也是通过JobCommitter实现Spark作业写出数据的一致性。If task output recovery is supported, job restart can be done more efficiently.voidrecoverTaskRecover the task output.根据接口的调用时机和顺序,我们可以大致梳理出MapReduce任务是如何通过JobCommitter的工作机制。如果task输出已存在,通过isRecorverySupport判断是否支持recovery,是的话,调用recoverTask,避免task的计算。可以看到,JobCommitter的基本机制是基于一种类似于分布式数据库中的两阶段提交协议的方式,task首先commit,主要的工作在task中完成,在appmaster收到所有task成功提交的信息后,进行job commit完成最后的提交工作。在MapReduce中,FileOutputCommitter是最常使用的一个Job Commiter实现,在写入数据到HDFS上时,完全满足两阶段提交协议的两个要求。