Smartdata 3.4.x之前版本支持JindoOssCommitter,Smartdata 3.4.x及后续版本, 针对OSS Bucket开启多版本功能多情况,增加支持JindoOssDirectCommitter。
背景信息
Job Committer是MapReduce和Spark等分布式计算框架的一个基础组件,用来解决分布式任务写数据的一致性问题。
Jindo Job Committer是阿里云E-MapReduce针对OSS场景开发的高效Job Committer,基于OSS的Multipart Upload接口,支持OSS Filesystem层的定制化。使用Jindo Job Committer时,Task数据直接写到最终目录中,在完成Job Commit前,过程数据对外不可见,彻底避免了Rename操作,同时保证数据的一致性。
- OSS拷贝数据的性能,针对不同的用户或Bucket会有差异,可能与OSS带宽以及是否开启某些高级特性等因素有关,具体问题可以咨询OSS的技术支持。
- 在所有任务都完成后,MapReduce Application Master或Spark Driver执行最终的Job Commit操作时,会有一个短暂的时间窗口。时间窗口的大小和文件数量线性相关,可以通过增大
fs.oss.committer.threads
以提高并发处理的速度。 - Hive和Presto等没有使用Hadoop的Job Committer。
- E-MapReduce集群中已默认打开Jindo Oss Committer的参数。
在MapReduce中使用JindoOssCommitter
- 进入YARN服务的mapred-site页签。
- 登录阿里云E-MapReduce控制台。
- 在顶部菜单栏处,根据实际情况选择地域和资源组。
- 单击上方的集群管理页签。
- 在集群管理页面,单击相应集群所在行的详情。
- 在左侧导航栏中,选择 。
- 单击配置页签。
- 在服务配置区域,单击mapred-site页签。
- 针对Hadoop不同版本,在YARN服务中配置以下参数。
- Hadoop 2.x版本
在YARN服务的mapred-site页签,设置mapreduce.outputcommitter.class为com.aliyun.emr.fs.oss.commit.JindoOssCommitter。
- Hadoop 3.x版本
在YARN服务的mapred-site页签,设置mapreduce.outputcommitter.factory.scheme.oss为com.aliyun.emr.fs.oss.commit.JindoOssCommitterFactory。
- Hadoop 2.x版本
- 保存配置。
- 单击右上角的保存。
- 在确认修改对话框中,输入执行原因,开启自动更新配置。
- 单击确定。
- 进入SmartData服务的smartdata-site页面。
- 在左侧导航栏中,选择 。
- 单击配置页签。
- 在服务配置区域,单击smartdata-site页签。
- 在SmartData服务的smartdata-site页签,设置fs.oss.committer.magic.enabled为true。
- 保存配置。
- 单击右上角的保存。
- 在确认修改对话框中,输入执行原因,开启自动更新配置。
- 单击确定。
在Spark中使用JindoOssCommitter
优化JindoOssCommitter性能
当MapReduce或Spark任务写大量文件的时候,您可以调整MapReduce Application Master或Spark Driver中并发执行Commit相关任务的线程数量,以提升Job Commit性能。在数据湖场景下,可以通过开启 OSS 的多版本功能进行数据保护,防止数据勿删等情况的发生。
优化Jindo Oss Magic Committer性能
在数据湖场景下,您可以通过开启OSS的多版本功能来保护数据,防止数据勿删等情况。在OSS Bucket开启多版本的情况下,如果在相同目录下频繁执行创建和删除操作,会降低目录List性能。因此,在SmartData 3.4.0版本优化了Jindo Oss Magic Committer性能,对于临时目录和文件,会连同历史版本一起删除,避免冗余的临时目录影响List性能。使用Jindo Oss Magic Committer时,默认开启临时目录历史版本清理功能。
如果需要关闭自动清理功能,您可以在作业中设置fs.jfs.cache.oss.delete-marker.dirs为空字符,或者在SmartData服务的smartdata-site页面,修改fs.jfs.cache.oss.delete-marker.dirs 为temporary,.staging,.hive-staging,__magic。
使用JindoOssDirectCommitter
对于开启多版本的Bucket,可以使用JindoOssDirectCommitter,避免产生临时文件,直接输出到目标目录。您可以修改Committer的配置为com.aliyun.emr.fs.oss.commit.direct.JindoOssDirectCommitter,以使用JindoOssDirectCommitter。
- 如果是YARN服务,您可以在mapred-site页面,修改mapreduce.outputcommitter.class为com.aliyun.emr.fs.oss.commit.direct.JindoOssDirectCommitter。
- 如果是Spark服务,您可以在spark-default页面,修改如下参数。
参数 描述 mapreduce.outputcommitter.class 修改为com.aliyun.emr.fs.oss.commit.direct.JindoOssDirectCommitter spark.sql.parquet.output.committer.class 修改为com.aliyun.emr.fs.oss.commit.direct.JindoOssDirectCommitter spark.sql.hive.outputCommitterClass 修改为com.aliyun.emr.fs.oss.commit.direct.JindoOssDirectCommitter spark.sql.sources.outputCommitterClass 修改为com.aliyun.emr.fs.oss.commit.direct.JindoOssDirectCommitter