S3A Magicv2 Committer - Amazon EMR

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

S3A Magicv2 Committer

在 EMR-6.15.0 版本中,亚马逊 EMR 引入了一种名为 MagicV2 提交者的新 S3A 提交者类型。有关此功能的全面信息,请参阅相关文档部分。

MagicV2 Committer代表了开源的增强实现 MagicCommitter,专门设计用于优化通过S3A文件系统向Amazon S3写入文件。与其前身一样,它利用 Amazon S3 的分段上传功能来消除通常与任务和任务提交阶段相关的传统列表和重命名操作。

与原始版本相比 MagicCommitter,MagicV2 提交器在任务提交阶段(而不是作业提交阶段)将文件写入作业的输出位置,从而表现出卓越的性能。这种方法支持分布式文件写入,无需在 Amazon S3 上临时存储提交元数据,从而提高了成本效益。此外,MagicV2 提交器允许在提交过程中跨多个线程覆盖文件路径,从而提高了灵活性。

启用 MagicV2 提交器

要启用 MagicV2 committer,请在作业配置中传递以下配置或使用核心站点配置来设置属性。有关更多信息,请参阅配置应用程序

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 提交器时,请务必遵循管理失败的分段上传的最佳实践。有关更多信息,请参阅《亚马逊 EMR 管理指南》中的 “使用 Amazon S3 存储桶的最佳实践” 部分。

  • 如果任务失败,成功任务提交的所有文件仍将在目标路径中可见。在这种情况下,用户需要手动清理已提交的文件,然后才能在同一目标路径上重新运行作业。

  • MagicV2 提交者会为任务尝试写入的每个文件消耗少量内存,直到任务被提交或中止。在大多数作业中,消耗的内存量可以忽略不计。但是,在某些情况下,单个执行器进程同时处理大量任务,这可能会带来很大的内存压力,并且容器或执行器可能会耗尽内存 (OOM)。增加容器或执行器内存应该可以解决这个问题。