EMRFS一致的视图元数据 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

EMRFS一致的视图元数据

EMRFS一致视图使用 DynamoDB 表跟踪一致性,以跟踪 Amazon S3 中已同步或由其创建的对象。EMRFS元数据用于跟踪所有操作 (读取、写入、更新和复制)。其中不存储任何实际内容。此元数据用于验证从 Amazon S3 接收的对象或元数据是否与预期内容匹配。通过此确认EMRFS,可以检查EMRFS写入 Amazon S3 的新对象或与EMRFS之同步的对象的列表 read-after-write一致性和一致性。多个集群可共享相同的元数据。

如何向元数据添加条目

您可以使用 syncimport 子命令向元数据添加条目。sync 反映路径中 Amazon S3 对象的状态,而 import 用于向元数据添加新条目。有关更多信息,请参阅EMRFSCLI命令参考

如何检查元数据与 Amazon S3 中的对象之间的差异

要检查元数据与 Amazon S3 之间的差异,请使用的diffEMRFSCLI子命令。有关更多信息,请参阅 EMRFSCLI命令参考

如何了解元数据操作是否受限制

EMRFS将元数据读取和写入操作的默认吞吐容量限制分别设置为 500 和 100 个单位。大量对象或存储桶可能会导致操作超过此容量,此时 DynamoDB 会对它们进行限制。例如,ProvisionedThroughputExceededException如果您执行的操作超过了这些容量限制,则应用程序可能会导致EMRFS抛出。限制后,该EMRFSCLI工具会尝试使用指数退避重试写入 DynamoDB 表,直到操作完成或达到将对象从 Amazon 写入 Amazon S3 的最大重试值。EMR

您可以配置自己的吞吐容量限制。但是,对于读取和写入操作,DynamoDB 有严格的分区限制,分别为每秒 3000 个读取容量单位 RCUs WCUs () 和 1000 个写入容量单位 ()。为避免限制导致sync故障,我们建议您将读取操作的吞吐量限制在 3000 RCUs 以下,将写入操作的吞吐量限制在 1000 以下。WCUs有关设置自定义吞吐容量限制的说明,请参阅 配置一致视图

您还可以在 DynamoDB 控制台中查看EMRFS元数据的亚马逊 CloudWatch 指标,您可以在其中查看受限制的读取和写入请求数量。如果受限制的请求数不为零值,则增加为读取或写入操作分配的吞吐量容量可能会使应用程序受益。如果您发现操作长时间接近分配的最大读取或写入吞吐量容量,则这样做也可能会获得性能好处。

重要EMRFS操作的吞吐量特性

读取和写入操作的默认值分别为 400 和 100 个吞吐量容量单位。您可以通过以下性能特征了解特定操作所需的吞吐量。这些测试是使用单节点 m3.large 集群执行的。所有操作都是单线程执行。特定应用程序特征会对性能造成很大影响,可能需要通过实验来优化文件系统操作。

操作 平均值 read-per-second 平均值 write-per-second
create(对象) 26.79 6.70
delete(对象) 10.79 10.79
delete(包含 1000 个对象的目录) 21.79 338.40
getFileStatus(对象) 34.70 0
getFileStatus(目录) 19.96 0
listStatus(包含 1 个对象的目录) 43.31 0
listStatus(包含 10 个对象的目录) 44.34 0
listStatus(包含 100 个对象的目录) 84.44 0
listStatus(包含 1,000 个对象的目录) 308.81 0
listStatus(包含 10,000 个对象的目录) 416.05 0
listStatus(包含 100,000 个对象的目录) 823.56 0
listStatus(包含 100 万个对象的目录) 882.36 0
mkdir(持续 120 秒) 24.18 4.03
mkdir 12.59 0
rename(对象) 19.53 4.88
rename(包含 1000 个对象的目录) 23.22 339.34
提交从元数据存储中清除旧数据的步骤

用户可能希望在基于 DynamoDB 的元数据中删除特定条目。这样可以帮助降低与表关联的存储成本。用户可以使用子命令手动或以编程方式清除特定条目。EMRFS CLI delete但是,如果您从元数据中删除条目,则EMRFS不会再进行任何一致性检查。

在任务完成后以编程方式进行清除,方法是向您的集群提交最后一个步骤,该集群将在上执行命令。EMRFS CLI例如,键入以下命令可向集群提交删除两天之前的所有条目的步骤。

aws emr add-steps --cluster-id j-2AL4XXXXXX5T9 --steps Name="emrfsCLI",Jar="command-runner.jar",Args=["emrfs","delete","--time","2","--time-unit","days"] { "StepIds": [ "s-B12345678902" ] }

使用返回的 StepId 值在日志中查看操作结果。