通过Job Committer保证Mapreduce/Spark任务数据一致性

本文由阿里云智能EMR团队高级技术专家李呈祥撰写,探讨如何通过Job Committer确保MapReduce/Spark任务在并发写入数据时的数据一致性。文章详细介绍了JobCommitter接口、FileOutputCommitter及其V2版本,以及基于Multipart Upload的No-Rename Committer实现,旨在优化写入S3/OSS等对象存储系统的性能和一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:李呈祥,花名司麟,阿里云智能EMR团队高级技术专家,Apache Hive Committer, Apache Flink Committer,目前主要专注于EMR产品中开源计算引擎的优化工作。


本篇文章相关视频及slides:https://www.slidestalk.com/AliSpark/HadoopJobCommitter24512?video

3月5日JindoFS系列直播【Hadoop Job committer 的演化和发展】


并发地向目标存储系统写数据是分布式任务的一个天然特性,通过在节点/进程/线程等级别的并发写数据,充分利用集群的磁盘和网络带宽,实现高容量吞吐。并发写数据的一个主要需要解决的问题就是如何保证数据一致性的问题,具体来说,需要解决下面列出的各个问题:

  1. 在分布式任务写数据的过程中,如何保证中间数据对外不可见。

  2. 在分布式任务正常完成后,保证所有的结果数据同时对外可见。

  3. 在分布式任务失败时,所有结果数据对外不可见且能正确清理。

  4. 开启预测执行时,保证多个执行相同任务的task只有一份结果数据在最终结果中。

此外,还要一些作业的异常情况需要处理,例如task失败重试,作业重启等等。Job Committer是MapReduce用来实现分布式写入一致性的保证,通过Job Committer的各种实现,保证MapReduce任务在各种异常场景中数据写出的一致性。Spark支持MapReduce的JobCommitter,同样也是通过JobCommitter实现Spark作业写出数据的一致性。

JobCommitter接口

MapReduce有V1和V2两套API接口,在包名中以mapredmapreduce区分,v1和v2版本的JobCommitter抽象接口基本一致,下面以org.apache.hadoop.mapreduce.OutputCommitter为例介绍主要的接口定义:

Modifier and Type Method and Description
abstract void setupJob(JobContext jobContext)For the framework to setup the job output during initialization.
void commitJob(JobContext jobContext)For committing job's output after successful job completion.
void abortJob(JobContext jobContext, org.apache.hadoop.mapreduce.JobStatus.State state)For aborting an unsuccessful job's output.
boolean isCommitJobRepeatable(JobContext jobContext)Re
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值