本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
S3A MagicV2 Committer
在 EMR-6.15.0 版本中,Amazon EMR 引入了一种新的 S3A 提交程序类型,称为 MagicV2 提交程序。有关此功能的全面信息,请参阅相关文档章节。
MagicV2 Committer 代表开源 MagicCommitter
与原始 MagicCommitter 相比,MagicV2 提交程序在任务提交阶段(而不是作业提交阶段)将文件写入作业的输出位置,从而表现出卓越的性能。这种方法支持分布式文件写入,Amazon S3 上不再需要临时提交元数据存储,从而提高了成本效益。此外,MagicV2 提交程序允许在提交过程中跨多个线程覆盖文件路径,从而提供更高的灵活性。
启用 MagicV2 提交程序
要启用 MagicV2 提交程序,请在作业配置中传递以下配置,或使用核心站点配置来设置该属性。有关更多信息,请参阅配置应用程序。
mapreduce.outputcommitter.factory.scheme.s3a=org.apache.hadoop.fs.s3a.commit.S3ACommitterFactory fs.s3a.committer.magic.enabled=true fs.s3a.committer.name=magicv2 fs.s3a.committer.magic.track.commits.in.memory.enabled=true
对于需要在提交或写入新文件之前覆盖现有目录的工作负载,除了前面提到的配置之外,还需要以下附加配置。
fs.s3a.committer.magic.overwrite.and.commit=true fs.s3a.committer.magic.delete.directory.threads=thread size
threads 配置的默认值为 20。但是,当需要覆盖大量目录时,应该调整此参数以获得更好的性能。此功能仅适用于 EMR-7.2.0 及以上版本。
注意事项
-
如果 Java 虚拟机 (JVM) 在任务运行并向 Amazon S3 写入数据时崩溃或被终止,则更有可能留下不完整的分段上传。因此,当您使用 MagicV2 提交程序时,请务必遵循管理失败的分段上传的最佳实践。有关更多信息,请参阅《Amazon EMR 管理指南》中的使用 Amazon S3 存储桶的最佳实践部分。
-
如果某个作业失败,则成功任务提交的任何文件仍然会出现在目标路径中。在这种情况下,在同一目标路径上重新运行作业之前,用户需要手动清理已提交的文件。
-
在任务被提交或中止之前,MagicV2 提交程序会占用少量内存来存放任务尝试写入的每个文件。在大多数作业中,占用的内存量可以忽略不计。然而,在某些情况下,当单个执行程序进程同时处理大量任务时,可能会造成很大内存压力,容器或执行程序可能会内存不足 (OOM)。增加容器或执行程序内存应该可以解决此问题。