Hadoop Job Committer演化与发展

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

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

直播简介:
Job Committer是Mapreduce/Spark等分布式计算框架的重要组成部分,为分布式任务的写入提供一致性的保证,本次分享主要介绍Job Committer的演进历史,以及社区和EMR在S3/OSS等云存储上的最新进展。


阿里巴巴开源大数据EMR技术团队成立Apache Spark中国技术社区,定期打造国内Spark线上线下交流活动。请持续关注。
钉钉群号:21784001
团队群号:HPRX8117
微信公众号:Apache Spark技术交流社区

展开查看详情

1.Hadoop Job Committer演化与发 展 计算平台事业部-EMR 司麟 2020-03-05

2.目录 1 Job Committer介绍 2 FileOutputCommitter V1/V2 3 JindoOssCommitter

3.Job Committer介绍 Part I

4.为什么需要Job Committer? 在各种异常情况下保证任务最终输出数据的一 致性: 1. 任务失败 2. 作业重试 3. Speculative task

5.Job Committer如何解决数据一致性问题 • commitTask(): commit task输出数据,保证task级 别数据一致性。 • commitJob(): commit job输出数据,保证job级别 数据一致性。 • abortTask(): abort task输出数据。 • abortJob(): abort 整个job输出数据。 • cleanUpJob(): 作业完成后,清理临时数据。

6.FileOutputCommiter V1 Rename 2次 Task输出 是 一致性 Job输出 是* 一致性 Job失败 是* 时一致性

7.FileOutputCommiter V2 Rename 1次 Task输出 是* 一致性 Job输出 否* 一致性 Job失败 否* 时一致性

8.FileOutputCommitter在OSS上的问题 • OssFileSystem Rename = Copy + Delete • 大量的文件拷贝可能会占据作业大部分的执行时间,尤其是写分区表等这种产生大量文件的任务。 • Rename阶段时间过长,影响Committer的数据一致性,且容易中途失败,影响最终一致性。

9.JindoOssCommitter的实现 Part I

10.Oss Multipart Upload Multipart Upload是OSS为了大文件上传引入的一个高效上传机制,相关的接口包括: 1. initMultipartUpload: 开启针对一个文件的multipart上传,获取到uploadId。 2. multipartUpload:指定path,uploadId,partNumber,上传数据块到OSS。在此过程中文件对外不可见。 3. completeMultipartUpload:完成MultipartUpload,此时文件对外可见。 4. abortMultipartUpload:取消未完成的MultipartUpload。 利用MultipartUpload未完成时,文件对外不可见的特性,JindoOssCommitter实现了完全没有rename操作的数 据一致性保证。

11.JindoOssCommitter实现 Rename 0次 Task输出 是 一致性 Job输出 是* 一致性 1. Task Write Data:通过MultipartUpload直接写入最终目录, Job失败 是* 在OSS上记录part信息。 一致性 2. Commit Task:合并Task所有part信息记录在OSS文件中。 3. Commit Job:取出所有part信息,Complete MultipartUpload。

12.S3a Committer • Since Hadoop 3.1.0 • Directory/Partition 模式: • Task写数据时,写到本地磁盘。 • Support mode • Task Commit时,Multipart upload到S3,并将part信 • Directory:依赖HDFS 息记录到HDFS上。 • Partitioned:依赖HDFS • Job Commit时,从HDFS获取part信息,complete • Magic:依赖S3Guard multipart upload。 • Magic模式: • Task写数据时,multipart upload到S3,在S3上记录 part信息. • Task Commit时,将Task所有part信息合并记录在S3 上。 • Job Commit时,从S3获取所有part信息,complete multipart upload。

13.性能测试对比 500G TeraGen测试 4台阿里云ecs.r6.4xlarge规格机器 16核/128G

14.性能测试对比 500G TeraGen测试 4台阿里云ecs.r6.4xlarge规格机器 16核/128G

15.THANKS/感谢聆听