Importation de fichiers à l'aide du cache distribué - Amazon EMR

Importation de fichiers à l'aide du cache distribué

DistributedCache est une fonctionnalité Hadoop qui peut améliorer l'efficacité lorsqu'une tâche de mappage ou de réduction a besoin d'accéder aux données courantes. Si votre cluster dépend d'applications ou de fichiers binaires qui n'ont pas été installés lors de la création du cluster, vous pouvez utiliser le cache distribué pour importer ces fichiers. Cette fonctionnalité permet à un nœud de cluster de lire les fichiers importés à partir de son système de fichiers local, au lieu de récupérer les fichiers à partir d'autres nœuds de cluster.

Pour plus d'informations, accédez à http://hadoop.apache.org/docs/stable/api/org/apache/hadoop/filecache/DistributedCache.html.

Vous invoquez DistributedCache lorsque vous créez le cluster. Les fichiers sont mis en cache juste avant de démarrer le travail Hadoop et les fichiers restent en cache pendant toute la durée du travail. Vous pouvez mettre en cache des fichiers stockés sur n'importe quel système de fichiers compatible Hadoop, par exemple HDFS ou Amazon S3. La taille par défaut du cache des fichiers est de 10 Go. Pour modifier la taille du cache, reconfigurez le paramètre Hadoop local.cache.size à l'aide de l'action d'amorçage. Pour de plus amples informations, veuillez consulter Création d'actions d'amorçage pour installer des logiciels supplémentaires.

Types de fichier pris en charge

DistributedCache autorise les fichiers individuels et les archives. Les fichiers individuels sont mis en cache en lecture seule. Les fichiers exécutables et les fichiers binaires disposent d'autorisations d'exécution définies.

Les archives correspondent à un ou plusieurs fichiers empaquetés à l'aide d'un utilitaire tel que gzip. Le cache distribué transmet les fichiers compressés à chaque nœud principal et décompresse l'archive dans le cadre de la mise en cache. DistributedCache prend en charge les formats de compression suivants :

  • zip

  • tgz

  • tar.gz

  • tar

  • jar

Emplacement des fichiers mis en cache

DistributedCache copie les fichiers uniquement vers les nœuds principaux. S'il n'y a pas de nœuds principaux dans le cluster, le cache distribué copie les fichiers vers le nœud primaire.

Le cache distribué associe les fichiers de cache au répertoire de travail actuel du mappeur et du réducteur à l'aide de liens symboliques. Un lien symbolique est un alias d'emplacement de fichier et non pas l'emplacement de fichier réel. La valeur du paramètre, yarn.nodemanager.local-dirs dans yarn-site.xml, indique l'emplacement des fichiers temporaires. Amazon EMR définit ce paramètre sur /mnt/mapred, ou une variation basée sur le type d'instance et la version de l'EMR. Par exemple, un paramètre peut avoir /mnt/mapred et /mnt1/mapred, car le type d'instance possède deux volumes éphémères. Les fichiers de cache sont situés dans un sous-répertoire de l'emplacement de fichier temporaire à l'adresse /mnt/mapred/taskTracker/archive.

Si vous mettez en cache un fichier individuel, le cache distribué place le fichier dans le répertoire archive. Si vous mettez en cache une archive, le cache distribué décompresse le fichier, crée un sous-répertoire dans /archive avec le même nom que le nom du fichier d'archive. Les fichiers individuels se trouvent dans le nouveau sous-répertoire.

Vous pouvez utiliser DistributedCache uniquement lorsque vous utilisez le streaming.

Accès aux fichiers mis en cache à partir d'applications de streaming

Pour accéder aux fichiers de cache à partir de vos applications de mappeur ou de réducteur, assurez-vous que vous avez ajouté le répertoire actif actuel (./) dans votre chemin d'application et que vous avez référencé les fichiers de cache comme s'ils étaient présents dans le répertoire actif actuel.

Accès aux fichiers mis en cache à partir d'applications de streaming

Vous pouvez utiliser la AWS Management Console et l'AWS CLI pour créer des clusters qui utilisent le cache distribué.

Note

Nous avons repensé la console Amazon EMR pour la rendre plus facile à utiliser. Consultez Nouveautés de la console pour en savoir plus sur les différences entre les anciennes et les nouvelles expériences de console.

New console
Pour spécifier les fichiers de cache distribué avec la nouvelle console
  1. Connectez-vous à la AWS Management Console et ouvrez la console Amazon EMR à l'adresse https://console.aws.amazon.com/emr.

  2. Sous EMR sur EC2 dans le volet de navigation de gauche, choisissez Clusters, puis Créer un cluster.

  3. Sous Étapes, choisissez Ajouter une étape. Cela ouvre la boîte de dialogue Ajouter une étape. Dans le champ Arguments, incluez les fichiers et les archives à enregistrer dans le cache. La taille du fichier (ou la taille totale des fichiers dans un fichier d'archives) doit être inférieure à la taille de cache allouée.

    Si vous voulez ajouter un fichier individuel au cache distribué, spécifiez -cacheFile suivi du nom et de l'emplacement du fichier, du signe dièse (#) et du nom que vous voulez donner au fichier lorsqu'il est placé dans le cache local. L'exemple suivant montre comment ajouter un fichier individuel au cache distribué.

    -cacheFile \ s3://DOC-EXAMPLE-BUCKET/file-name#cache-file-name

    Si vous voulez ajouter un fichier d'archive au cache distribué, saisissez -cacheArchive suivi de l'emplacement des fichiers dans Amazon S3, du signe dièse (#), puis du nom que vous voulez donner à l'ensemble des fichiers dans le cache local. L'exemple suivant montre comment ajouter un fichier d'archive au cache distribué.

    -cacheArchive \ s3://DOC-EXAMPLE-BUCKET/archive-name#cache-archive-name

    Entrez les valeurs appropriées dans les autres champs de la boîte de dialogue. Les options diffèrent selon le type d'étape. Pour ajouter votre étape et quitter la boîte de dialogue, choisissez Ajouter une étape.

  4. Choisissez toutes les autres options qui s'appliquent à votre cluster.

  5. Pour lancer votre cluster, choisissez Créer le cluster.

Old console
Pour spécifier des fichiers de cache distribués avec l'ancienne console
  1. Accédez à la nouvelle console Amazon EMR et sélectionnez Basculer vers l'ancienne console depuis le menu latéral. Pour plus d'informations sur ce qui vous attend lorsque vous passez à l'ancienne console, consultez la rubrique Utilisation de l'ancienne console.

  2. Choisissez Create Cluster (Créer un cluster).

  3. Choisissez Exécution d'étape comme mode de lancement.

  4. Dans la section Étapes, dans le champ Ajouter une étape, choisissez Programme de streaming dans la liste et cliquez sur Configurer et ajouter.

  5. Dans le champ Arguments, incluez les fichiers et les archives à enregistrer dans le cache et choisissez Ajouter. La taille du fichier (ou la taille totale des fichiers dans un fichier d'archives) doit être inférieure à la taille de cache allouée.

    Si vous voulez ajouter un fichier individuel au cache distribué, spécifiez -cacheFile suivi du nom et de l'emplacement du fichier, du signe dièse (#) et du nom que vous voulez donner au fichier lorsqu'il est placé dans le cache local. L'exemple suivant montre comment ajouter un fichier individuel au cache distribué.

    -cacheFile \ s3://DOC-EXAMPLE-BUCKET/file_name#cache_file_name

    Si vous voulez ajouter un fichier d'archive au cache distribué, saisissez -cacheArchive suivi de l'emplacement des fichiers dans Amazon S3, du signe dièse (#), puis du nom que vous voulez donner à l'ensemble des fichiers dans le cache local. L'exemple suivant montre comment ajouter un fichier d'archive au cache distribué.

    -cacheArchive \ s3://DOC-EXAMPLE-BUCKET/archive_name#cache_archive_name
  6. Procédez à la configuration et au lancement de votre cluster. Votre cluster copie les fichiers vers l'emplacement du cache avant de traiter les éventuelles étapes de cluster.

CLI
Pour spécifier les fichiers de cache distribué avec l'AWS CLI
  • Pour soumettre une étape de streaming lorsqu'un cluster est créé, tapez la commande create-cluster avec le paramètre --steps. Pour spécifier les fichiers de cache distribué à l'aide de l'AWS CLI, spécifiez les arguments appropriés lorsque vous soumettez une étape de streaming.

    Si vous voulez ajouter un fichier individuel au cache distribué, spécifiez -cacheFile suivi du nom et de l'emplacement du fichier, du signe dièse (#) et du nom que vous voulez donner au fichier lorsqu'il est placé dans le cache local.

    Si vous voulez ajouter un fichier d'archive au cache distribué, saisissez -cacheArchive suivi de l'emplacement des fichiers dans Amazon S3, du signe dièse (#), puis du nom que vous voulez donner à l'ensemble des fichiers dans le cache local. L'exemple suivant montre comment ajouter un fichier d'archive au cache distribué.

    Pour plus d'informations sur l'utilisation des commandes Amazon EMR dans l'interface AWS CLI, consultez https://docs.aws.amazon.com/cli/latest/reference/emr.

Exemple 1

Tapez la commande suivante pour lancer un cluster et soumettre une étape de streaming qui utilise -cacheFile pour ajouter un fichier, sample_dataset_cached.dat, dans le cache.

aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 --applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,Args=["--files","s3://my_bucket/my_mapper.py s3://my_bucket/my_reducer.py","-mapper","my_mapper.py","-reducer","my_reducer.py,"-input","s3://my_bucket/my_input","-output","s3://my_bucket/my_output", "-cacheFile","s3://my_bucket/sample_dataset.dat#sample_dataset_cached.dat"]

Lorsque vous spécifiez le nombre d'instances sans utiliser le paramètre --instance-groups, un seul nœud primaire est lancé et les instances restantes sont lancées en tant que nœuds principaux. Tous les nœuds utiliseront le type d'instance spécifié dans la commande.

Si vous n'avez pas encore créé le rôle de service EMR par défaut et le profil d'instance EC2, tapez aws emr create-default-roles pour les créer avant de taper la sous-commande create-cluster.

Exemple 2

La commande suivante illustre la création d'un cluster de streaming et utilise -cacheArchive pour ajouter une archive de fichiers dans le cache.

aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 --applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,Args=["--files","s3://my_bucket/my_mapper.py s3://my_bucket/my_reducer.py","-mapper","my_mapper.py","-reducer","my_reducer.py,"-input","s3://my_bucket/my_input","-output","s3://my_bucket/my_output", "-cacheArchive","s3://my_bucket/sample_dataset.tgz#sample_dataset_cached"]

Lorsque vous spécifiez le nombre d'instances sans utiliser le paramètre --instance-groups, un seul nœud primaire est lancé et les instances restantes sont lancées en tant que nœuds principaux. Tous les nœuds utiliseront le type d'instance spécifié dans la commande.

Si vous n'avez pas encore créé le rôle de service EMR par défaut et le profil d'instance EC2, tapez aws emr create-default-roles pour les créer avant de taper la sous-commande create-cluster.