为什么我的 Amazon EMR 集群的 EMRFS 元数据表中有那么多记录?

上次更新时间:2020 年 11 月 17 日

我的 Amazon EMR 集群的 EMRFS 元数据表持续增长。为什么会出现这种情况,我该怎样让它停下?

简短描述

当您使用 EMRFS 删除 Amazon Simple Storage Service (Amazon S3) 中的文件或目录时,EMRFS 会向元数据表中的相应记录添加一个删除标记。但是,EMRFS 不会从元数据表中删除该记录。随着时间的推移,Amazon DynamoDB 表中的记录数量会增加。这可能会导致以下问题:

  • 由于元数据表的限制,Amazon S3 从 EMR 集群读/写的操作可能会失败。
  • EMRFS sync 命令需要很长时间才能完成。

要清除已删除的记录,请在元数据表上启用生存时间 (TTL),并将 deletionTTL 指定为 TTL 属性。然后,填充属性以查找和删除已删除对象的记录。

注意:TTL 不适用于在 Amazon S3 中直接删除的对象。TTL 仅适用于使用 EMRFS 删除的对象。

解决方法

1.    在元数据表上启用 TTL(默认情况下名为 EmrFSMetadata)。对于 TTL attribute (TTL 属性),请输入 deletionTTL。或者,运行以下 AWS 命令行界面 (AWS CLI) 命令。将 example-EmrFSMetadata 替换为您的表名。

$ aws dynamodb update-time-to-live --table-name example-EmrFSMetadata --time-to-live-specification "Enabled=true, AttributeName=deletionTTL"

注意:如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

2.    要在表上填充 deletionTTL 属性,请运行 emrfs populate-ttl 命令。此命令检查元数据表中的每条记录。如果记录具有删除标记,EMRFS 会设置 deletionTTL 属性,然后在 24 小时后删除该记录。

$ emrfs populate-ttl

3.    populate-ttl 命令查找已有删除标记的文件的记录。要自动清除将来删除的文件的记录,请打开 emrfs-site.xml,然后将 fs.s3.consistent.metadata.delete.ttl.enabled 设置为 true

4.    (可选)要更改到期时间(默认情况下为 24 小时),请在 emrfs-site.xml 中设置 fs.s3.consistent.metadata.delete.ttl.expiration.seconds 属性。例如,要将到期时间设置为 2 小时:

"fs.s3.consistent.metadata.delete.ttl.expiration.seconds":"7200"

要在新集群上设置所有这些属性,请在创建集群时提供与此相似的配置

[
    {
      "Classification": "emrfs-site",
      "Properties": {
        "fs.s3.consistent.retryPeriodSeconds":"10",
        "fs.s3.consistent":"true",
        "fs.s3.consistent.retryCount": "5",
        "fs.s3.consistent.metadata.tableName":"EmrFSMetadata",
        "fs.s3.consistent.metadata.delete.ttl.enabled":"true",
        "fs.s3.consistent.metadata.delete.ttl.expiration.seconds":"7200"
      }
    }
]

这篇文章对您有帮助吗?


您是否需要账单或技术支持?