本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
S3A Magicv2 Committer
在 EMR-6.15.0 版本中,亚马逊 EMR 引入了一种名为 MagicV2 提交者的新 S3A 提交者类型。有关此功能的全面信息,请参阅相关文档部分。
MagicV2 Committer代表了开源的增强实现 MagicCommitter
与原始版本相比 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)。增加容器或执行器内存应该可以解决这个问题。