Pourquoi la table de métadonnées EMRFS de mon cluster Amazon EMR a-t-elle autant d'enregistrements ?

Date de la dernière mise à jour : 17/11/2020

La table de métadonnées EMRFS de mon cluster Amazon EMR ne cesse de croître. Pourquoi cela se produit-il et comment puis-je résoudre le problème ?

Brève description

Lorsque vous utilisez EMRFS pour supprimer un fichier ou un répertoire dans Amazon Simple Storage Service (Amazon S3), EMRFS ajoute un marqueur de suppression à l'enregistrement correspondant dans la table de métadonnées. Toutefois, EMRFS ne supprime pas l'enregistrement de la table de métadonnées. Au fil du temps, le nombre d'enregistrements dans la table Amazon DynamoDB augmente. Cela peut provoquer les problèmes suivants :

  • Les opérations de lecture/écriture Amazon S3 à partir du cluster EMR peuvent échouer en raison de la limitation de la table de métadonnées.
  • La commande de synchronisation EMRFS prend beaucoup de temps.

Pour purger les enregistrements supprimés, activez la durée de vie (TTL) dans la table de métadonnées et spécifiez DeletionTTL comme attribut TTL. Ensuite, renseignez l'attribut pour rechercher et supprimer des enregistrements pour les objets supprimés.

Remarque : la TTL ne s'applique pas aux objets que vous supprimez directement dans Amazon S3. TTL s'applique uniquement aux objets que vous supprimez avec EMRFS.

Résolution

1.    Activez TTL sur la table de métadonnées (nommée EmrFSMetadata par défaut). Pour l'attribut TTL, saisissez deletionTTL. Vous pouvez également exécuter la commande depuis l’interface de ligne de commande AWS (AWS CLI) suivante. Remplacez example-EmrFSMetadata par le nom de votre table.

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

Remarque : si vous recevez des erreurs lors de l'exécution des commandes depuis l'interface de ligne de commande AWS, assurez-vous que vous utilisez la version AWS CLI la plus récente.

2.    Pour renseigner l'attribut deletionTTL dans la table, exécutez la commande emrfs populate-ttl. Cette commande vérifie chaque enregistrement dans la table de métadonnées. Si un enregistrement possède un marqueur de suppression, EMRFS définit l'attribut deletionTTL, puis supprime l'enregistrement 24 heures plus tard.

$ emrfs populate-ttl

3.    La commande populate-ttl recherche les enregistrements des fichiers qui ont déjà des marqueurs de suppression. Pour supprimer automatiquement les enregistrements des fichiers que vous supprimez ultérieurement, ouvrez emrfs-site.xml, puis définissez fs.s3.consistent.metadata.delete.ttl.enabled sur true.

4.    (Facultatif) Pour modifier la durée d'expiration (24 heures par défaut), définissez la propriété fs.s3.consistent.metadata.delete.ttl.expiration.seconds dans emrfs-site.xml. Par exemple, pour définir le délai d'expiration sur 2 heures :

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

Pour définir toutes ces propriétés sur de nouveaux clusters, fournissez une configuration comme celle-ci lorsque vous créez un cluster :

[
    {
      "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"
      }
    }
]

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?