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

EMRFS 一致视图元数据

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

如何向元数据添加条目

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

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

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

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

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

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

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

重要 EMRFS 操作的吞吐量特征

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

运算 每秒平均读取量 每秒平均写入量
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(包含 1000 个对象的目录) 308.81 0
listStatus(包含 10000 个对象的目录) 416.05 0
listStatus(包含 100000 个对象的目录) 823.56 0
listStatus(包含 1000000 个对象的目录) 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 值检查日志以了解操作结果。