Amazon EMR クラスターの EMRFS メタデータテーブルに、非常に多くのレコードがあるのはなぜですか?
最終更新日: 2020 年 11 月 17 日
Amazon EMR クラスターの EMRFS メタデータテーブルは増加し続けています。こうなったのはなぜでしょうか? どうすれば停止できるでしょうか?
簡単な説明
EMRFS を使用して Amazon Simple Storage Service (Amazon S3) のファイルまたはディレクトリを削除すると、EMRFS はメタデータテーブルの対応するレコードに削除マーカーを追加します。ただし、EMRFS は、メタデータテーブルからそのレコードを削除しません。時間の経過とともに、Amazon DynamoDB テーブルのレコード数が増加します。これにより、次の問題が発生する可能性があります。
- EMR クラスターからの Amazon S3 の読み取り/書き込み操作は、メタデータテーブルのスロットリングのために失敗することがあります。
- EMRFS sync コマンドの完了には長い時間がかかります。
削除されたレコードをパージするには、メタデータテーブルで Time to Live (TTL) を有効にし、TTL 属性として deletionTTL を指定します。次に、属性を入力し、削除されたオブジェクトのレコードを検索および削除します。
注: TTL は、Amazon S3 で直接削除したオブジェクトには適用されません。TTL は、EMRFS で削除したオブジェクトにのみ適用されます。
解決方法
1. メタデータテーブル (デフォルトでは emrfsMetadata という名前が付けられています) で TTL を有効にします。[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"
}
}
]