Création d'un cluster avec des versions AMI plus récentes d'Amazon EMR - Amazon EMR

Création d'un cluster avec des versions AMI plus récentes d'Amazon EMR

Les versions Amazon EMR 2.x et 3.x sont référencées par la version AMI. À partir des versions 4.0.0 et ultérieures d'Amazon EMR, les publications sont référencées par version, à l'aide d'une étiquette de version telle que emr-5.11.0. Cette modification est particulièrement visible lorsque vous créez un cluster à l'aide de l'AWS CLI ou par programmation.

Lorsque vous utilisez l'AWS CLI pour créer un cluster à l'aide d'une version AMI, utilisez l'option --ami-version, par exemple --ami-version 3.11.0. De nombreuses options, fonctions et applications introduites dans les versions 4.0.0 et ultérieures d'Amazon EMR ne sont pas disponibles lorsque vous spécifiez une option --ami-version. Pour plus d'informations, consultez create-cluster dans la Référence des commandes de la AWS CLI.

L'exemple suivant de commande de l'AWS CLI lance un cluster avec une version AMI.

Note

Les caractères de continuation de ligne Linux (\) sont inclus pour des raisons de lisibilité. Ils peuvent être supprimés ou utilisés dans les commandes Linux. Pour Windows, supprimez-les ou remplacez-les par un caret (^).

aws emr create-cluster --name "Test cluster" --ami-version 3.11.0 \ --applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-groups InstanceGroupType=MASTER,InstanceCount=1,\ InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=2,\ InstanceType=m3.xlarge --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hadoop,\ Name="Configuring infinite JVM reuse",Args=["-m","mapred.job.reuse.jvm.num.tasks=-1"]

Par programmation, toutes les versions d'Amazon EMR utilisent l'action RunJobFlowRequest de l'API EMR pour créer des clusters. Dans l'exemple suivant, le code Java crée un cluster à l'aide de la version AMI 3.11.0.

RunJobFlowRequest request = new RunJobFlowRequest() .withName("AmiVersion Cluster") .withAmiVersion("3.11.0") .withInstances(new JobFlowInstancesConfig() .withEc2KeyName("myKeyPair") .withInstanceCount(1) .withKeepJobFlowAliveWhenNoSteps(true) .withMasterInstanceType("m3.xlarge") .withSlaveInstanceType("m3.xlarge");

L'appel RunJobFlowRequest suivant utilise quant à lui une étiquette de version :

RunJobFlowRequest request = new RunJobFlowRequest() .withName("ReleaseLabel Cluster") .withReleaseLabel("emr-5.36.1") .withInstances(new JobFlowInstancesConfig() .withEc2KeyName("myKeyPair") .withInstanceCount(1) .withKeepJobFlowAliveWhenNoSteps(true) .withMasterInstanceType("m3.xlarge") .withSlaveInstanceType("m3.xlarge");

Configuration de la taille du cluster

Lorsque votre cluster s'exécute, Hadoop détermine le nombre de tâches de mappeur et de réducteur nécessaires pour traiter les données. Les clusters les plus grands doivent avoir plus de tâches pour une meilleure utilisation des ressources et une plus courte durée de traitement. En règle générale, un cluster EMR conserve la même taille tout au long de sa vie ; vous définissez le nombre de tâches lorsque vous créez le cluster. Lorsque vous redimensionnez un cluster en cours d'exécution, vous pouvez modifier le traitement au cours de l'exécution du cluster. Par conséquent, au lieu d'utiliser un nombre fixe de tâches, vous pouvez modifier le nombre de tâches au cours de la vie du cluster. Il existe deux options de configuration qui vous aideront à définir le nombre idéal de tâches :

  • mapred.map.tasksperslot

  • mapred.reduce.tasksperslot

Vous pouvez définir ces deux options dans le fichier mapred-conf.xml. Lorsque vous soumettez un travail au cluster, le client du travail vérifie le nombre total actuel d'emplacements de mappage et de réduction disponibles sur l'ensemble du cluster. Le client du travail utilise alors les équations suivantes pour définir le nombre de tâches :

  • mapred.map.tasks = mapred.map.tasksperslot * emplacements de mappage dans le cluster

  • mapred.reduce.tasks = mapred.reduce.tasksperslot * emplacements de réduction dans le cluster

Le client du travail lit uniquement le paramètre tasksperslot si le nombre de tâches n'est pas configuré. Vous pouvez remplacer le nombre de tâches à tout moment, pour tous les clusters via une action d'amorçage ou individuellement, travail par travail, en ajoutant une étape pour modifier la configuration.

Amazon EMR supporte les défaillances des nœuds de tâches et continue l'exécution du cluster même si un nœud de tâches cesse d'être disponible. Amazon EMR alloue automatiquement des nœuds de tâches supplémentaires pour remplacer les nœuds défaillants.

Vous pouvez avoir un nombre différent de nœuds de tâches pour chaque étape du cluster. Vous pouvez également ajouter une étape à un cluster en cours d'exécution pour modifier le nombre de nœuds de tâches. Étant donné que toutes les étapes sont garanties de s'exécuter de manière séquentielle par défaut, vous pouvez spécifier le nombre de nœuds de tâches en cours d'exécution pour n'importe quelle étape.