

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Création ou exécution d'une application Hadoop
<a name="emr-hadoop-application"></a>

**Topics**
+ [Créer des fichiers binaires à l'aide d'Amazon EMR](emr-build-binaries.md)
+ [Traitement des données avec Streaming](UseCase_Streaming.md)
+ [Traitement de données à l'aide d'un fichier JAR personnalisé](UseCase_CustomJar.md)

# Créer des fichiers binaires à l'aide d'Amazon EMR
<a name="emr-build-binaries"></a>

Vous pouvez utiliser Amazon EMR comme un environnement de génération pour compiler les programmes à utiliser dans votre cluster. Les programmes que vous utilisez avec Amazon EMR doivent être compilés sur un système exécutant la même version de Linux que celle utilisée par Amazon EMR. Pour une version 32 bits, les options de compilation sur un ordinateur 32 bits ou de compilation croisée 32 bits doivent être activées. Pour une version 64 bits, les options de compilation sur un ordinateur 64 bits ou de compilation croisée 64 bits doivent être activées. Pour plus de plus amples informations sur les versions d'instance EC2, consultez [Planification et configuration des instances](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-ec2-instances.html) dans le *Guide de gestion d'Amazon EMR*. Les langages de programmation pris en charge incluent C\$1\$1, Python et C\$1. 

Le tableau suivant décrit les étapes nécessaires pour générer et tester votre application à l'aide d'Amazon EMR.


**Processus de création d'un module**  

|  |  | 
| --- |--- |
|  1 |  Connectez-vous au nœud maître de votre cluster. | 
|  2  |  Copiez les fichiers source dans le nœud principal. | 
|  3  |  Créez des fichiers binaires avec les optimisations nécessaires. | 
|  4 |  Copiez des fichiers binaires à partir du nœud principal dans Amazon S3. | 

Chacune de ces étapes est détaillée dans les sections suivantes. 

**Pour vous connecter au nœud principal du cluster**
+ Suivez les instructions fournies dans [Connexion au nœud principal à l'aide de SSH](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) dans le *Guide de gestion d'Amazon EMR*.

**Pour copier les fichiers source dans le nœud principal**

1. Placez vos fichiers source dans un compartiment Amazon S3. Pour savoir comment créer des compartiments et comment transférer des données vers Amazon S3, consultez le [Guide du l'utilisateur Amazon Simple Storage Service](https://docs.aws.amazon.com/AmazonS3/latest/userguide/).

1. Créez un dossier sur votre cluster Hadoop pour vos fichiers source en entrant une commande similaire à celle qui suit :

   ```
   mkdir SourceFiles
   ```

1. Copiez vos fichiers source à partir d'Amazon S3 vers le nœud principal en tapant une commande similaire à celle qui suit :

   ```
   hadoop fs -get s3://amzn-s3-demo-bucket/SourceFiles SourceFiles
   ```

**Pour créer des fichiers binaires avec les optimisations nécessaires**  
La façon dont vous créez vos fichiers binaires dépend de plusieurs facteurs. Suivez les instructions correspondant aux outils d'installation que vous utilisez pour installer et configurer votre environnement. Vous pouvez utiliser les commandes de spécification du système Hadoop pour obtenir les informations relatives au cluster, afin de déterminer comment installer votre environnement.

**Pour identifier les spécifications du système**
+ Utilisez les commandes suivantes pour vérifier l'architecture que vous utilisez pour créer vos fichiers binaires.

  1. Pour afficher la version de Debian, saisissez la commande suivante :

     ```
     master$ cat /etc/issue
     ```

     La sortie ressemble à ce qui suit.

     ```
     Debian GNU/Linux 5.0
     ```

  1. Pour afficher le nom DNS public et la taille du processeur, saisissez la commande suivante :

     ```
     master$ uname -a
     ```

     La sortie ressemble à ce qui suit.

     ```
     Linux domU-12-31-39-17-29-39.compute-1.internal 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:34:28 EST 2008 x86_64 GNU/Linux
     ```

  1. Pour afficher la vitesse du processeur, saisissez la commande suivante :

     ```
     master$ cat /proc/cpuinfo
     ```

     La sortie ressemble à ce qui suit.

     ```
     processor : 0
     vendor_id : GenuineIntel
     model name : Intel(R) Xeon(R) CPU E5430 @ 2.66GHz
     flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr cda lahf_lm
     ...
     ```

Une fois que vos fichiers binaires sont créés, vous pouvez copier les fichiers dans Amazon S3.

**Pour copier des fichiers binaires à partir du nœud principal dans Amazon S3**
+ Entrez la commande suivante pour copier les fichiers binaires dans votre compartiment Amazon S3 :

  ```
  hadoop fs -put BinaryFiles s3://amzn-s3-demo-bucket/BinaryDestination
  ```

# Traitement des données avec Streaming
<a name="UseCase_Streaming"></a>

Le streaming Hadoop est un utilitaire fourni avec Hadoop qui vous permet de développer des MapReduce exécutables dans des langages autres que Java. Streaming est mis en œuvre sous la forme d'un fichier JAR, afin que vous puissiez l'exécuter à partir de la ligne de commande ou de l'API Amazon EMR, tout comme un fichier JAR standard. 

Cette section décrit comment utiliser le streaming avec Amazon EMR. 

**Note**  
Le streaming Apache Hadoop est un outil indépendant. En tant que tel, ses fonctions et ses paramètres ne sont pas tous décrits ici. [Pour plus d'informations sur le streaming Hadoop, rendez-vous sur http://hadoop.apache. org/docs/stable/hadoop-streaming/HadoopStreaming.html](http://hadoop.apache.org/docs/stable/hadoop-streaming/HadoopStreaming.html).

## Utilisation de l'utilitaire de streaming Hadoop
<a name="HadoopStreamCommands"></a>

Cette section décrit comment utiliser l'utilitaire de streaming Hadoop.


**Processus Hadoop**  

|  |  | 
| --- |--- |
| 1 |  Ecrivez votre exécutable mappeur et réducteur dans le langage de programmation de votre choix. Suivez les instructions dans la documentation Hadoop pour écrire vos exécutable de diffusion en continu. Les programmes doivent lire leur entrée à partir de données d'entrée et de sortie standard par le biais de sortie standard. Par défaut, chaque ligne d'entrée/sortie représente un enregistrement et le premier onglet sur chaque ligne est utilisé comme séparateur entre la clé et la valeur.  | 
| 2 |  Testez vos exécutables localement et chargez-les sur Amazon S3.  | 
| 3 |  Utilisez l'interface de ligne de commande d'Amazon EMR ou la console d'Amazon EMR pour exécuter votre application.  | 

Chaque script mappeur se lance comme un processus distinct dans le cluster. Chaque exécutable de réducteur remplace le résultat de l'exécutable du mappeur par la sortie de données du flux de travail.

Les paramètres `input`, `output`, `mapper`, et `reducer` sont requis par la plupart des applications de streaming. Le tableau suivant décrit ces paramètres et d'autres, facultatifs.


| Paramètre | Description | Obligatoire | 
| --- | --- | --- | 
| -input |  Emplacement des données d'entrée sur Amazon S3. Type : Chaîne Par défaut : aucun Contrainte : URI. Si aucun protocole n'est spécifié, il utilise alors le système de fichiers par défaut du cluster.   | Oui | 
| -output |  Emplacement sur Amazon S3 où Amazon EMR charge les données traitées. Type : Chaîne Par défaut : aucun Contrainte : URI Par défaut : si aucun emplacement n'est spécifié, Amazon EMR charge les données à l'emplacement spécifié par `input`.  | Oui | 
| -mapper |  Nom de l'exécutable du mappeur. Type : Chaîne Par défaut : aucun  | Oui | 
| -reducer |  Nom de l'exécutable du réducteur. Type : Chaîne Par défaut : aucun  | Oui | 
| -cacheFile |  Un emplacement Amazon S3 qui contient des fichiers que Hadoop peut copier dans votre répertoire de travail local (principalement pour améliorer les performances). Type : Chaîne Par défaut : aucun Contraintes : [URI]\$1[nom symlink à créer dans répertoire de travail]   | Non | 
| -cacheArchive |  Fichier JAR à extraire dans le répertoire de travail Type : Chaîne Par défaut : aucun Contraintes : [URI]\$1[nom de répertoire symlink à créer dans répertoire de travail   | Non | 
| -combiner |  Combine les résultats Type : Chaîne Par défaut : aucun Contraintes : nom de classe Java  | Non | 

L'exemple de code suivant est un exécutable de mappeur écrit dans Python. Ce script fait partie de l' WordCount exemple d'application.

```
 1. #!/usr/bin/python
 2. import sys
 3. 
 4. def main(argv):
 5.   line = sys.stdin.readline()
 6.   try:
 7.     while line:
 8.       line = line.rstrip()
 9.       words = line.split()
10.       for word in words:
11.         print "LongValueSum:" + word + "\t" + "1"
12.       line = sys.stdin.readline()
13.   except "end of file":
14.     return None
15. if __name__ == "__main__":
16.   main(sys.argv)
```

# Soumission d'une étape de streaming
<a name="CLI_CreateStreaming"></a>

Cette section présente les concepts de base de la soumission d'une étape de streaming à un cluster. Une application de streaming lit l'entrée depuis l'entrée standard, puis exécute un script ou un exécutable (appelé un mappeur) sur chaque entrée. Le résultat de chacune des entrées est enregistré localement, généralement sur une partition de système de fichiers distribué Hadoop (HDFS). Une fois que toutes les entrées sont traitées par le mappeur, un second script ou exécutable (appelé un réducteur) traite les résultats du mappeur. Les résultats du réducteur sont envoyés vers la sortie standard. Vous pouvez enchaîner une série d'étapes de streaming, où le résultat d'une étape devient l'entrée d'une autre. 

Le mappeur et le réducteur peuvent être chacun référencés en tant que fichier ou vous pouvez fournir une classe Java. Vous pouvez implémenter le mappeur et le réducteur dans n'importe lequel des langages pris en charge, y compris Ruby, Perl, Python, PHP ou Bash.

## Soumission d'une étape de streaming à l'aide de la console
<a name="emr-dev-create-stream-console"></a>

Cet exemple décrit comment utiliser la console Amazon EMR pour soumettre une étape streaming à un cluster en cours d'exécution.

**Pour soumettre une étape de streaming**

1. [Ouvrez la console Amazon EMR à l'adresse /emr. https://console.aws.amazon.com](https://console.aws.amazon.com/emr/)

1. Dans la **Liste de clusters**, sélectionnez le nom de votre cluster.

1. Faites défiler l'affichage jusqu'à la section **Étapes** et développez-la, puis choisissez **Ajouter une étape**.

1. Dans la boîte de dialogue **Ajouter une étape** :
   + Pour **Type d'étape**, choisissez **Programme de streaming**.
   + Pour **Nom**, acceptez le nom par défaut (Programme de streaming) ou saisissez un nouveau nom.
   + Pour **Mappeur**, saisissez l'emplacement de votre classe de mappeur, ou accédez à ce dernier via le navigateur, dans Hadoop ou dans un compartiment S3 dans lequel l'exécutable de mappeur, tel qu'un programme Python, réside. La valeur du chemin doit être au format*BucketName*/*path*/*MapperExecutable*.
   + Pour **Reducer (Réducteur)**, saisissez l'emplacement de votre classe de mappeur, ou accédez à ce dernier via le navigateur, dans Hadoop, ou dans un compartiment S3 dans lequel l'exécutable du réducteur, tel qu'un programme Python, réside. La valeur du chemin doit être au format*BucketName*/*path*/*MapperExecutable*. Amazon EMR prend en charge le mot clé spécial *aggregate*. Pour plus d'informations, consultez la bibliothèque Aggregate fournie par Hadoop.
   + Pour **Emplacement S3 d'entrée**, saisissez l'emplacement de vos données d'entrée ou accédez à ce dernier via le navigateur. 
   + Pour **Emplacement S3 de sortie**, saisissez le nom du compartiment de sortie Amazon S3 ou naviguez à ce dernier.
   + Pour **Arguments**, laissez le champ vide.
   + Pour **Action sur échec**, acceptez l'option par défaut (**Continuer**).

1. Choisissez **Ajouter**. L'étape s'affiche dans la console avec le statut En suspens. 

1. Le statut de l'étape passe de Pending (En suspens) à Running (En cours d'exécution) puis à Completed (Terminé), au fur et à mesure de son exécution. Pour mettre à jour l'état, choisissez l'icône d'**actualisation** au-dessus de la colonne Actions. 

## AWS CLI
<a name="emr-dev-create-stream-cli"></a>

Ces exemples montrent comment utiliser l'étape AWS CLI pour créer un cluster et soumettre une étape de streaming. 

**Pour créer un cluster et soumettre une étape de streaming à l'aide du AWS CLI**
+ Pour créer un cluster et soumettre une étape de streaming à l'aide du AWS CLI, tapez la commande suivante et remplacez-la *myKey* par le nom de votre paire de clés EC2. Notez que votre argument pour `--files` doit être le chemin Amazon S3 vers l'emplacement de votre script, et les arguments pour `-mapper` et `-reducer` doivent être les noms des fichiers de script respectifs.

  ```
  aws emr create-cluster --name "Test cluster" --release-label emr-7.12.0 --applications Name=Hue 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,pathtoscripts,-mapper,mapperscript,-reducer,reducerscript,aggregate,-input,pathtoinputdata,-output,pathtooutputbucket]
  ```
**Note**  
Les caractères de continuation de ligne Linux (\$1) 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 (^).

  Lorsque vous spécifiez le nombre d'instances sans utiliser le paramètre `--instance-groups`, un seul nœud maître est lancé et les instances restantes sont lancées en tant que nœuds principaux. Tous les nœuds utilisent le type d'instance spécifié dans la commande.
**Note**  
Si vous n'avez pas encore créé le rôle de service Amazon 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`.

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

# Traitement de données à l'aide d'un fichier JAR personnalisé
<a name="UseCase_CustomJar"></a>

Un fichier JAR personnalisé exécute un programme Java compilé que vous pouvez charger sur Amazon S3. Vous devez compiler le programme en fonction de la version d'Hadoop que vous voulez lancer, et soumettre une étape `CUSTOM_JAR` à votre cluster Amazon EMR. Pour plus d'informations sur la compilation d'un fichier JAR, consultez [Créer des fichiers binaires à l'aide d'Amazon EMR](emr-build-binaries.md).

Pour plus d'informations sur la création d'une MapReduce application Hadoop, consultez le [MapReduce didacticiel](http://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html) de la documentation d'Apache Hadoop.

**Topics**
+ [Soumission d'une étape JAR personnalisée](emr-launch-custom-jar-cli.md)

# Soumission d'une étape JAR personnalisée
<a name="emr-launch-custom-jar-cli"></a>

Un fichier JAR personnalisé exécute un programme Java compilé que vous pouvez charger sur Amazon S3. Vous devez compiler le programme en fonction de la version d'Hadoop que vous voulez lancer, et soumettre une étape `CUSTOM_JAR` à votre cluster Amazon EMR. Pour plus d'informations sur la compilation d'un fichier JAR, consultez [Créer des fichiers binaires à l'aide d'Amazon EMR](emr-build-binaries.md).

Pour plus d'informations sur la création d'une MapReduce application Hadoop, consultez le [MapReduce didacticiel](http://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html) de la documentation d'Apache Hadoop.

Cette section présente les principes de base de la soumission d'une étape JAR personnalisée dans Amazon EMR. La soumission d'une étape JAR personnalisée vous permet d'écrire un script pour traiter vos données à l'aide du langage de programmation Java. 

## Soumettre une étape JAR personnalisée à l'aide de la console
<a name="ConsoleCreatingaCustomJARJob"></a>

Cet exemple décrit comment utiliser la console Amazon EMR pour soumettre une étape JAR personnalisée à un cluster en cours d'exécution.

**Pour soumettre une étape JAR personnalisée à l'aide de la console**

1. [Ouvrez la console Amazon EMR à l'adresse /emr. https://console.aws.amazon.com](https://console.aws.amazon.com/emr/)

1. Dans la **Liste de clusters**, sélectionnez le nom de votre cluster.

1. Faites défiler l'affichage jusqu'à la section **Étapes** et développez-la, puis choisissez **Ajouter une étape**.

1. Dans la boîte de dialogue **Ajouter une étape** :
   + Pour **Type d'étape**, choisissez **JAR personnalisé**.
   + Pour **Nom**, acceptez le nom par défaut (JAR personnalisé) ou tapez un nouveau nom.
   + Pour **JAR S3 location (Emplacement S3 JAR)**, tapez ou accédez à l'emplacement de votre fichier JAR. L'emplacement JAR peut-être un chemin dans S3 ou une classe Java entièrement qualifiée dans le classpath. 
   + Pour **Arguments**, tapez les arguments requis sous forme de chaînes séparées par des espaces ou laissez le champ vide.
   + Pour **Action sur échec**, acceptez l'option par défaut (**Continuer**).

1. Choisissez **Ajouter**. L'étape s'affiche dans la console avec le statut En suspens. 

1. Le statut de l'étape passe de Pending (En suspens) à Running (En cours d'exécution) puis à Completed (Terminé), au fur et à mesure de son exécution. Pour mettre à jour l'état, choisissez l'icône d'**actualisation** au-dessus de la colonne Actions. 

## Lancer un cluster et soumettre une étape JAR personnalisée à l'aide du AWS CLI
<a name="emr-dev-create-jar-cli"></a>

**Pour lancer un cluster et soumettre une étape JAR personnalisée à l'aide du AWS CLI**

Pour lancer un cluster et soumettre une étape JAR personnalisée avec le AWS CLI, tapez la `create-cluster` sous-commande avec le `--steps` paramètre.
+ Pour lancer un cluster et soumettre une étape JAR personnalisée, tapez la commande suivante, remplacez-la *myKey* par le nom de votre paire de clés EC2 et par le nom *amzn-s3-demo-bucket* de votre bucket.

  ```
  aws emr create-cluster --name "Test cluster" --release-label emr-7.12.0 \
  --applications Name=Hue Name=Hive Name=Pig --use-default-roles \
  --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \
  --steps Type=CUSTOM_JAR,Name="Custom JAR Step",ActionOnFailure=CONTINUE,Jar=pathtojarfile,Args=["pathtoinputdata","pathtooutputbucket","arg1","arg2"]
  ```
**Note**  
Les caractères de continuation de ligne Linux (\$1) 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 (^).

  Lorsque vous spécifiez le nombre d'instances sans 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 utilisent le type d'instance que vous spécifiez dans la commande.
**Note**  
Si vous n'avez pas encore créé le rôle de service Amazon 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`.

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

## Dépendances tierces
<a name="emr-custom-jar-dependency"></a>

Parfois, il peut être nécessaire de l'inclure dans le MapReduce chemin de classe JARs à utiliser avec votre programme. Vous avez deux options pour cela :
+ Incluez `--libjars s3://URI_to_JAR` dans les options de l'étape pour la procédure dans [Lancer un cluster et soumettre une étape JAR personnalisée à l'aide du AWS CLI](#emr-dev-create-jar-cli).
+ Lancez le cluster avec un paramètre `mapreduce.application.classpath` modifié dans `mapred-site.xml`. Utilisez la classification de configuration `mapred-site`. Pour créer le cluster à l'aide de l'étape AWS CLI, cela ressemblerait à ce qui suit :

  ```
  aws emr create-cluster --release-label emr-7.12.0 \
  --applications Name=Hue Name=Hive Name=Pig --use-default-roles \
  --instance-type m5.xlarge --instance-count 2  --ec2-attributes KeyName=myKey \
  --steps Type=CUSTOM_JAR,Name="Custom JAR Step",ActionOnFailure=CONTINUE,Jar=pathtojarfile,Args=["pathtoinputdata","pathtooutputbucket","arg1","arg2"] \
  --configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json
  ```

  `myConfig.json`:

  ```
  [
      {
        "Classification": "mapred-site",
        "Properties": {
          "mapreduce.application.classpath": "path1,path2"
        }
      }
    ]
  ```

  La liste séparée par des virgules des chemins d'accès doit être ajoutée au chemin de classe pour la JVM de chaque tâche.