Important — environnement AWS
Ce TD utilise la console AWS et quelques commandes exécutées depuis un terminal. Il s’agit d’une découverte manuelle d’Amazon EMR. N’utilisez ni Terraform ni CloudFormation dans ce TD : l’automatisation de cette infrastructure fera l’objet du TD3.
AWS est un environnement payant. Chaque binôme doit utiliser le compte, la région et les limites de coûts indiqués par l’enseignant. Ne créez aucune ressource supplémentaire.
Prérequis avant la séance (TD2 — AWS EMR)
À faire avant le jour du TD : un délai d’activation peut être nécessaire.
À la fin du TD, vous devez être capables de :
Dans le TD1, vous avez généré un fichier `ventes.csv`, puis vous avez travaillé dans un mini-cluster Hadoop lancé avec Docker Compose. Le chemin logique utilisé était notamment :
/data/ecommerce/ventes.csv /data/ecommerce/input/ /data/ecommerce/output/
Vous reprenez le même générateur Python et le même format de fichier. Le résultat métier demandé reste le même : calculer le chiffre d’affaires total par catégorie avec MapReduce Streaming.
Dans le TD1, les conteneurs simulaient les machines d’un cluster sur votre poste. Dans ce TD, les machines sont des instances EC2 provisionnées par Amazon EMR dans un VPC AWS.
Question de départ
Votre fichier actuel fait peut-être quelques mégaoctets. Et si `ventes.csv` pesait 500 Go ? Sur combien de machines faudrait-il le stocker et le traiter ? Que faudrait-il configurer vous-même, et que pourrait prendre en charge un service managé ?
Écrivez vos premières hypothèses avant de commencer. Vous les vérifierez dans les missions suivantes.
Répartissez les rôles, puis échangez-les à mi-parcours :
| Rôle | Responsabilités |
|---|---|
| Pilote AWS | manipule la console et le terminal, annonce chaque action avant de l’exécuter |
| Observateur / rapporteur | complète les tableaux, relève les valeurs affichées et vérifie les coûts et la suppression |
Chaque binôme doit conserver les réponses aux questions ouvertes et les valeurs observées. Elles servent de compte rendu.
Avant de créer quoi que ce soit :
eu-west-3.Vous devez fournir une infrastructure Hadoop capable d’exécuter le traitement des ventes. Vous ne démarrez plus quatre conteneurs à la main : vous devez décrire le cluster à un service cloud et comprendre les choix proposés.
TD2-emr-noms
Dans la configuration logicielle :
Les noms de menus et la version exacte peuvent évoluer dans la console. Ce qui compte ici est de relever la release EMR, la version Hadoop et les applications réellement installées, plutôt que de recopier aveuglément une capture d'écran.
| Élément observé | Valeur de notre cluster | Pourquoi cette valeur ? |
|---|---|---|
| Région AWS (sélecteur en haut à droite de la console, choisie avant de créer le cluster) | (ex. eu-west-3) | même région pour limiter les transferts et simplifier l'accès |
| Release EMR | emr-7.14.0 | dernière version stable en 7.x, compatible Hadoop 3.x |
| Offre d'applications | Spark Interactive | inclut Hadoop, Hive, Spark, Livy, JupyterEnterpriseGateway |
| Hadoop | 3.4.2 | stockage et traitements étudiés dans le TD1 |
| YARN | inclus avec Hadoop 3.4.2 | gestion des ressources et des applications |
| MapReduce | inclus avec Hadoop 3.4.2 | exécution du job Streaming |
| HDFS | inclus avec Hadoop 3.4.2 | comparaison avec le stockage local du TD1 |
| Hive | 3.1.3 | non utilisé directement dans ce TD, mais installé par défaut avec l'offre |
| Spark | 3.5.x | traitements distribués étudiés dans les missions suivantes |
| Applications non sélectionnées | Pig, Oozie, HBase, Presto, Trino, Zeppelin, Flink, TensorFlow, Zookeeper, Phoenix, Hue, JupyterHub, HCatalog, AmazonCloudWatchAgent | hors périmètre du TD (streaming, NoSQL, ML, orchestration, monitoring avancé) |
Remarque : YARN, HDFS et MapReduce ne sont pas des cases à cocher séparées dans la console EMR — ils font partie intégrante du socle Hadoop installé dès que “Hadoop” est sélectionné (ce qui est automatique avec l'offre Spark Interactive). Il n'y a donc pas de choix à faire les concernant, seulement à vérifier leur présence et leur version dans les détails du cluster une fois créé.
Dans la section matériel, la console AWS propose un choix entre groupes d'instances uniformes (par défaut) et flottes d'instances flexibles. Gardez le mode par défaut pour ce TD.
La console affiche alors trois rôles :
Remplacez le type d'instance par défaut par une instance généraliste standard, plus universellement compatible :
Configuration recommandée pour ce TD : Primaire : m5.xlarge Unité principale : m5.xlarge Tâche - 1 : m5.xlarge
| Groupe EMR | Nombre choisi | Type d'instance | Rôle attendu |
|---|---|---|---|
| Primaire | 1 | m5.xlarge | services de coordination, NameNode, ResourceManager |
| Unité principale | 1 | m5.xlarge | stockage HDFS et exécution YARN |
| Tâche - 1 | 1 | m5.xlarge | exécution YARN sans stockage HDFS durable du cluster |
La famille m5 est une famille d'instances généralistes (x86_64, Intel), le choix le plus répandu et documenté pour EMR/Hadoop. Elle offre un bon équilibre CPU/mémoire, suffisant pour ce TD.
À noter : avec une seule instance d'unité principale, la réplication HDFS par défaut (facteur 3) ne peut pas être pleinement respectée (il faudrait au moins 3 instances d'unité principale pour avoir 3 copies sur des machines différentes). C'est acceptable dans ce contexte pédagogique à petite échelle, mais c'est un point à mentionner dans vos observations si on vous interroge sur la tolérance aux pannes de ce cluster.
Complétez le tableau avant de poursuivre. Une case peut contenir plusieurs services : EMR décrit des rôles de nœuds, et non une correspondance stricte « un conteneur = un service ».
| Dans EMR | Dans le TD1 Docker Compose | Services principalement associés | Peut contenir des blocs HDFS ? |
|---|---|---|---|
| Primary / Master | |||
| Core | |||
| Task |
Répondez :
Sur un compte AWS standard, un VPC par défaut existe déjà dans chaque région, avec un subnet public dans chaque zone de disponibilité. EMR le sélectionne automatiquement : il n'y a rien à créer ni configurer manuellement pour ce TD.
Dans la section réseau de l'assistant de création :
1. vérifiez que le VPC proposé est bien le VPC par défaut (``vpc-xxxxxxxx (default)``) ; 2. un subnet est présélectionné : laissez la valeur proposée ; 3. les security groups sont créés automatiquement par EMR (un pour le master, un pour les core/task) si vous ne modifiez rien.
Notez les valeurs proposées automatiquement :
| Paramètre réseau | Valeur | Observation |
|---|---|---|
| VPC | par défaut | |
| Subnet | public (zone de disponibilité) | |
| Security group master | créé automatiquement par EMR | |
| Security group core/task | créé automatiquement par EMR | |
| Adresse publique du master | oui, par défaut sur subnet public |
Le security group du master créé par défaut n'autorise pas le SSH entrant. Il faudra l'ouvrir manuellement après la création du cluster (voir section suivante) pour pouvoir vous connecter.
Répondez :
Pour pouvoir se connecter en SSH au nœud primaire du cluster (console, exécution manuelle de commandes Hadoop, consultation de fichiers de logs), une paire de clés EC2 est nécessaire.
Étapes (en dehors de la création du cluster EMR) :
EC2 > Réseau et sécurité > Paires de clés > Créer une paire de clés
Nom : td-hadoop-votrenom
Type de clé : RSA
Format de fichier privé :
- .pem si vous vous connectez depuis Linux/Mac ou WSL
- .ppk si vous utilisez PuTTY sous Windows
Le fichier de clé privée est téléchargé une seule fois. Conservez-le précieusement (par exemple dans votre dossier utilisateur, avec des droits restreints) : il ne pourra pas être retéléchargé depuis la console AWS.
Sous Linux/Mac, pensez à restreindre les droits du fichier avant de l'utiliser :
chmod 400 td-hadoop-votrenom.pem
Dans la configuration du cluster EMR, section Sécurité, sélectionnez cette paire de clés dans le menu déroulant Paire de clés EC2 (SSH).
EMR nécessite deux rôles IAM pour fonctionner :
Dans la section Rôle IAM, AWS propose deux options pour chacun de ces deux rôles :
Cas attendu : votre compte est un compte AWS standard (personnel, free tier ou passé en basic)
Sur ce type de compte, vous disposez normalement des droits IAM complets. Choisissez Créer une fonction du service pour les deux champs. AWS génère automatiquement les rôles nécessaires, généralement nommés :
Ces rôles seront ensuite proposés automatiquement lors des prochaines créations de cluster. C'est le cas normal et attendu pour ce TD.
Cas exceptionnel : erreur de création (droits IAM restreints ou rôle déjà partiellement créé)
Il peut arriver, même sur un compte standard, qu'un des deux rôles existe déjà (par exemple suite à un essai antérieur) sans que le second n'existe. Ce n'est pas incohérent : ce sont deux ressources IAM indépendantes.
Si vous tentez Créer une fonction du service pour le champ Fonction du service EC2 et obtenez une erreur du type :
Échec de la création du rôle EMR_EC2_DefaultRole. Vous n'obtenez peut-être pas l'autorisation nécessaire pour effectuer cette action.
Marche à suivre dans ce cas :
Si l'erreur persiste ou si aucun rôle n'apparaît, signalez-le à l'enseignant : cela peut indiquer une restriction particulière sur votre compte à vérifier.
1. Sélectionnez la paire de clés EC2 fournie ou créée pour le TD. 2. Vérifiez une dernière fois la région, le nombre d’instances, le type d’instance, le rôle IAM et le réseau. 3. Créez le cluster. 4. Observez les états successifs : démarrage, configuration, attente, en cours d’exécution. 5. Tant que le cluster n’est pas à l’état Waiting ou équivalent, ne lancez pas le job.
Le bouton de création lance des ressources facturées. Relevez l’heure de création et le nom du cluster. Le nettoyage de la Mission 7 est obligatoire, même si le job échoue.
Le cluster est « prêt » dans la console. Est-ce suffisant pour savoir ce qui fonctionne ? Connectez-vous au master et retrouvez les preuves observables dans le TD1.
Dans la page du cluster, ouvrez les détails et relevez le DNS ou l’adresse publique du nœud primaire. Depuis votre poste :
ssh -i ma-cle-emr.pem hadoop@DNS_PUBLIC_DU_MASTER
Le nom d’utilisateur dépend de l’image. Pour une AMI EMR standard, `hadoop` est couramment utilisé ; ne remplacez pas ce nom au hasard si la consigne de votre compte indique autre chose.
À la première connexion, vérifiez l’empreinte proposée. Si vous obtenez `Permission denied (publickey)`, contrôlez le chemin de la clé, `chmod 400`, le nom d’utilisateur et la règle SSH du security group.
hostname whoami cat /etc/os-release | head free -h df -h
Relevez le nom d’hôte et la mémoire visible. Comparez la machine avec votre ordinateur et avec le conteneur master du TD1.
Exécutez :
hdfs dfs -ls / hdfs dfs -df -h hdfs dfsadmin -report
Selon la version, la sortie peut contenir des lignes supplémentaires. Relevez au minimum : nombre de DataNodes vivants, capacité totale, capacité utilisée et espace restant.
| Indicateur HDFS | Valeur EMR | Valeur / observation dans le TD1 |
|---|---|---|
| Live datanodes | ||
| Dead datanodes | ||
| DFS capacity | ||
| DFS used | ||
| Block size observée | ||
| Facteur de réplication par défaut |
Questions :
yarn node -list yarn queue -status default jps
Dans `jps`, repérez les processus Hadoop/YARN visibles sur le master. Complétez :
| Élément | Résultat observé | Rôle |
|---|---|---|
| ResourceManager | ||
| NodeManager sur le master, éventuellement | ||
| NameNode | ||
| DataNode sur le master, éventuellement | ||
| NodeManagers des core |
Questions :
Dans un cluster EMR, la répartition exacte des démons dépend de la release, des options et du type de nœud. Utilisez les commandes et la console comme source d’observation : ne concluez pas à partir du seul nom « master », « core » ou « task ».
Dans le TD1, vous ouvriez des ports Docker exposés sur `localhost`. Dans AWS, les interfaces du master ne doivent pas être publiques par défaut. Comment observer l’interface NameNode et l’interface YARN sans ouvrir leurs ports à Internet ?
Depuis votre poste, essayez éventuellement d’ouvrir l’URL de l’interface indiquée dans la console EMR ou dans la documentation de la release. Si l’accès direct échoue, c’est une information utile : le service existe dans le réseau du cluster, mais n’est pas exposé à votre navigateur.
N’ajoutez pas une règle `0.0.0.0/0` simplement pour faire fonctionner l’interface.
Gardez une première session SSH ouverte. Dans un second terminal, créez des redirections locales vers les ports web du master. Les numéros de ports peuvent varier selon la release ; utilisez ceux affichés dans la console ou par l’enseignant.
ssh -i ma-cle-emr.pem \ -N \ -L 9870:localhost:9870 \ -L 8088:localhost:8088 \ hadoop@DNS_PUBLIC_DU_MASTER
Ouvrez ensuite dans votre navigateur :
http://localhost:9870 http://localhost:8088
Le port `9870` est fréquemment associé à l’interface web du NameNode et `8088` à celle du ResourceManager, mais vérifiez la page de votre cluster. Si un service utilise un autre port, remplacez la redirection.
Pour explorer plusieurs interfaces sans ajouter chaque port, vous pouvez utiliser un proxy SOCKS dynamique si la consigne le permet :
ssh -i ma-cle-emr.pem -N -D 8157 hadoop@DNS_PUBLIC_DU_MASTER
Configurez ensuite le navigateur ou une extension pour utiliser un proxy SOCKS5 sur `localhost:8157`. Cette méthode n’est pas équivalente à une publication de ports : le navigateur envoie ses requêtes à travers la session SSH.
Dans l’interface NameNode, relevez l’état des DataNodes, la capacité et les blocs. Dans l’interface YARN, relevez les nœuds, les ressources et les applications.
| Interface | Information recherchée | Valeur / observation |
|---|---|---|
| NameNode UI | nombre de DataNodes live | |
| NameNode UI | capacité HDFS utilisée | |
| YARN RM UI | nombre de nœuds actifs | |
| YARN RM UI | mémoire/vCores disponibles | |
| YARN RM UI | applications en cours |
Questions :
Vous devez placer `ventes.csv` dans le cluster pour une première observation, mais aussi le conserver indépendamment du cluster. Déposez-le dans HDFS et dans Amazon S3, puis comparez les deux stockages.
Utilisez le bucket fourni. Si vous devez en créer un, son nom doit être globalement unique et conforme aux règles S3. Ajoutez un préfixe propre au binôme :
s3://NOM_DU_BUCKET/td2/binomeXX/ s3://NOM_DU_BUCKET/td2/binomeXX/input/ s3://NOM_DU_BUCKET/td2/binomeXX/output/
Depuis le master, vérifiez que le rôle de l’instance permet l’accès prévu :
aws sts get-caller-identity aws s3 ls s3://NOM_DU_BUCKET/td2/binomeXX/
Si `aws` n’est pas configuré comme attendu, ne copiez pas une clé personnelle sur le master. Signalez le problème et vérifiez le rôle IAM associé au profil d’instance.
Vous pouvez déposer le fichier depuis votre poste avec la console S3 ou avec l’AWS CLI. Exemple depuis le poste, si l’authentification pédagogique est configurée :
aws s3 cp ventes.csv \ s3://NOM_DU_BUCKET/td2/binomeXX/input/ventes.csv aws s3 ls s3://NOM_DU_BUCKET/td2/binomeXX/input/
Si vous avez d’abord copié le fichier sur le master, exécutez plutôt la commande depuis le master. Notez la taille affichée et, si possible, l’horodatage.
Depuis le master :
hdfs dfs -mkdir -p /data/ecommerce/input hdfs dfs -put -f ventes.csv /data/ecommerce/input/ventes.csv hdfs dfs -ls -h /data/ecommerce/input hdfs dfs -du -h /data/ecommerce/input/ventes.csv
Contrôlez le contenu sans afficher tout le fichier :
hdfs dfs -cat /data/ecommerce/input/ventes.csv | head aws s3 cp s3://NOM_DU_BUCKET/td2/binomeXX/input/ventes.csv - | head
Comparez les deux sorties : en-tête, séparateur, ordre des colonnes et premières lignes doivent être compatibles avec le TD1.
Dans les traitements EMR, un chemin s3://... peut être utilisé comme source ou destination par Hadoop grâce à la couche d'intégration S3 d'EMR, souvent appelée EMRFS. Vous allez l'utiliser sans la traiter comme un disque local.
| Critère | HDFS du cluster EMR | S3 |
|---|---|---|
| Emplacement physique observé | ||
| Répartition / réplication | ||
| Disponible sans cluster actif ? | ||
| Latence d'accès attendue | ||
| Usage typique dans ce TD | ||
| Persistance après terminaison EMR |
Répondez :
S3 n’est pas un espace temporaire gratuit. Les objets restent présents et peuvent continuer à entraîner des coûts selon la classe, les requêtes et les transferts.
Dans le TD1, le job lisait un fichier local ou HDFS du cluster Docker. Cette fois, le fichier d’entrée est dans S3 et le résultat doit également être écrit dans S3. Le calcul métier ne change pas.
Le job calcule :
clé = catégorie valeur = quantité × prix_unitaire résultat = somme du chiffre d’affaires par catégorie
Réutilisez `mapper.py` et `reducer.py` du TD1. Si vous devez les reconstituer, adaptez les noms de colonnes au fichier généré dans votre TD1. Exemple de version avec un CSV comportant les colonnes `category`, `quantity` et `unit_price` :
# mapper.py
import csv
import sys
reader = csv.DictReader(sys.stdin)
for row in reader:
try:
category = row["category"]
quantity = float(row["quantity"])
unit_price = float(row["unit_price"])
print(f"{category}\t{quantity * unit_price}")
except (KeyError, TypeError, ValueError):
# Une ligne invalide est signalée sur stderr, pas dans la sortie métier.
print(f"Ligne ignorée : {row}", file=sys.stderr)
# reducer.py
import sys
current_category = None
current_total = 0.0
for line in sys.stdin:
line = line.rstrip("\n")
if not line:
continue
category, value = line.split("\t", 1)
value = float(value)
if current_category is not None and category != current_category:
print(f"{current_category}\t{current_total:.2f}")
current_total = 0.0
current_category = category
current_total += value
if current_category is not None:
print(f"{current_category}\t{current_total:.2f}")
Le code ci-dessus est un gabarit. Si le script du TD1 produit des colonnes françaises, un montant déjà calculé ou un autre séparateur, reprenez le code et le contrat du TD1. Ne modifiez pas le générateur de données uniquement pour faire correspondre le gabarit.
Testez localement avec un petit extrait avant de soumettre le job :
head -n 20 ventes.csv | python3 mapper.py | sort -k1,1 | python3 reducer.py
Puis copiez les scripts sur le master. Depuis votre poste :
scp -i ma-cle-emr.pem mapper.py reducer.py \ hadoop@DNS_PUBLIC_DU_MASTER:/home/hadoop/
Sur le master :
chmod +x mapper.py reducer.py head -n 3 ventes.csv printf 'category\tquantity\tunit_price\n' | ./mapper.py
Avant le lancement, choisissez un répertoire de sortie qui n’existe pas encore :
INPUT=s3://NOM_DU_BUCKET/td2/binomeXX/input/ventes.csv OUTPUT=s3://NOM_DU_BUCKET/td2/binomeXX/output/ca-par-categorie aws s3 ls "$INPUT" aws s3 ls "$OUTPUT" || true
Hadoop refuse généralement d’écrire dans un répertoire de sortie déjà présent.
Depuis `/home/hadoop` sur le master :
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar \ -files mapper.py,reducer.py \ -input "$INPUT" \ -output "$OUTPUT" \ -mapper "python3 mapper.py" \ -reducer "python3 reducer.py"
Le chemin du jar peut varier selon la release. Si le chemin ci-dessus n’existe pas, recherchez le jar déjà installé :
find /usr/lib /usr/share -name 'hadoop-streaming*.jar' 2>/dev/null | head
Relancez la commande avec le chemin réellement trouvé. Observez les phases de soumission, map, shuffle/sort et reduce.
Pendant ou après l’exécution :
yarn application -list -appStates ALL hdfs dfs -ls -h "$OUTPUT" aws s3 ls "$OUTPUT/"
Le job peut produire un ou plusieurs fichiers `part-*` ainsi qu’un marqueur `_SUCCESS`. Affichez le résultat :
aws s3 cp "$OUTPUT/part-*" -
Si le motif `part-*` n’est pas accepté par votre version d’AWS CLI, listez les objets puis copiez le nom exact retourné.
| Étape | Observation |
|---|---|
| Application YARN | |
| Nombre de tâches map | |
| Nombre de tâches reduce | |
| Temps total | |
| Fichier(s) de sortie | |
| Erreurs / lignes rejetées | |
| Résultat d’une catégorie vérifiée à la main |
Questions :
| Axe | TD1 Docker Compose | TD2 EMR |
|---|---|---|
| Lancement du job | ||
| Entrée | ||
| Planification | ||
| Exécution map/reduce | ||
| Sortie | ||
| Consultation des logs |
Le job fonctionne. Mais un cluster de trois machines est-il toujours un bon choix ? Vous devez relier la configuration technique à la facture et au volume de données.
Dans la console EMR et dans la page EC2, observez les types d’instances, leur nombre et leur état. Complétez :
| Groupe | Type | Nombre | vCPU / mémoire indiqués | Coût horaire affiché ou estimé |
|---|---|---|---|---|
| Master | ||||
| Core | ||||
| Task |
Le coût réel dépend notamment de la région, du type d’instance, du modèle de facturation, des options EMR, du stockage et d’éventuels transferts. Utilisez l’outil d’estimation ou la page tarifaire validée par l’enseignant plutôt que de mémoriser un montant.
Pour une estimation simplifiée :
coût horaire approximatif = coût EMR des nœuds + coût EC2 des instances + stockage / requêtes / transferts éventuels coût de la séance ≈ coût horaire × durée pendant laquelle les ressources restent actives
Questions :
Ouvrez les options de dimensionnement sans modifier le cluster si la consigne ne l’autorise pas. Repérez :
| Question | Réponse du binôme |
|---|---|
| Quel groupe ajouteriez-vous pour absorber un pic de calcul ? | |
| Pourquoi des nœuds task sont-ils intéressants pour ce pic ? | |
| Pourquoi un scale-in des core doit-il être traité avec prudence ? | |
| Quelles métriques faudrait-il surveiller ? |
Dans le TD1, vous aviez arrêté un DataNode et observé la réplication, puis étudié le scheduler YARN. Ici, relisez les informations disponibles dans les interfaces et répondez sans provoquer de panne non autorisée :
Ne terminez, n’arrêtez et ne redémarrez pas une instance depuis EC2 pendant le TD sans consigne explicite. Ces actions peuvent mettre le cluster dans un état incohérent et compliquer le nettoyage.
Le travail est terminé. Un cluster EMR laissé en fonctionnement continue de mobiliser des ressources. Vous devez le supprimer, puis vérifier ce qui reste volontairement dans S3.
Avant de terminer le cluster, conservez dans votre compte rendu :
Depuis le terminal :
aws s3 ls s3://NOM_DU_BUCKET/td2/binomeXX/ --recursive
Dans la console EMR :
1. sélectionnez uniquement votre cluster ; 2. choisissez Terminate / Terminer ; 3. confirmez après avoir vérifié le nom ; 4. attendez l’état terminé ; 5. observez les instances EC2 associées et vérifiez qu’elles sont également libérées selon le comportement du service.
Ne supprimez pas le bucket partagé de la classe. Ne supprimez pas les objets d’un autre binôme.
La terminaison est destructive pour le cluster et son HDFS local. Elle ne supprime pas automatiquement les objets S3 que vous avez déposés. Vérifiez donc les deux faits séparément.
Après la terminaison :
aws s3 ls s3://NOM_DU_BUCKET/td2/binomeXX/ --recursive # À exécuter seulement si l'enseignant demande la suppression : aws s3 rm s3://NOM_DU_BUCKET/td2/binomeXX/ --recursive
Complétez :
| Ressource | Avant nettoyage | Après terminaison | Action restante |
|---|---|---|---|
| Cluster EMR | |||
| Instances EC2 du cluster | |||
| HDFS `/data/ecommerce` | |||
| Objet S3 `input/ventes.csv` | |||
| Objets S3 `output/` | |||
| Clé SSH |
Complétez d’abord la colonne « observation » sans chercher une définition générale.
| Axe | Docker Compose — TD1 | Amazon EMR — TD2 | Observation du binôme |
|---|---|---|---|
| Provisioning | fichiers Compose et démarrage local des conteneurs | création d’un cluster par la console, instances EC2 provisionnées par EMR | |
| Mise à l’échelle | modification du nombre de conteneurs / ressources locales | nombre et types de nœuds configurés, auto-scaling possible | |
| Tolérance de panne | panne simulée d’un conteneur, réplication HDFS locale | plusieurs instances et réplication, selon la configuration choisie | |
| Coût | ressources de votre poste / environnement local | facturation AWS des services et ressources pendant leur durée de vie | |
| Accès aux interfaces | ports Docker exposés sur localhost | interfaces privées atteintes par tunnel SSH ou proxy | |
| Persistance des données | volumes / fichiers locaux selon Compose | HDFS attaché au cluster ; S3 indépendant du cluster | |
| Gestion des versions | images Docker et fichiers du projet | release EMR, AMI et applications sélectionnées | |
| Sécurité | réseau Docker local et ports publiés | IAM, VPC, subnet, security groups, clé SSH |
| Besoin | Commande | |
|---|---|---|
| Connexion SSH au master | `ssh -i ma-cle.pem hadoop@DNS_PUBLIC_DU_MASTER` | |
| Copier un fichier vers le master | `scp -i ma-cle.pem fichier hadoop@DNS_PUBLIC_DU_MASTER:/home/hadoop/` | |
| Vérifier l’identité AWS du nœud | `aws sts get-caller-identity` | |
| Lister un préfixe S3 | `aws s3 ls s3:BUCKET/PREFIX/ –recursive` | | Copier vers S3 | `aws s3 cp fichier.csv s3:BUCKET/PREFIX/` | |
| Copier depuis S3 | `aws s3 cp s3:BUCKET/PREFIX/fichier.csv .` | | Supprimer un préfixe S3 | `aws s3 rm s3:BUCKET/PREFIX/ –recursive` | |
| Lister HDFS | `hdfs dfs -ls -h CHEMIN` | |
| Créer un répertoire HDFS | `hdfs dfs -mkdir -p CHEMIN` | |
| Envoyer vers HDFS | `hdfs dfs -put -f fichier CHEMIN/` | |
| Afficher le début d’un fichier HDFS | `hdfs dfs -cat CHEMIN/fichier | head` |
| Taille HDFS | `hdfs dfs -du -h CHEMIN` | |
| État des DataNodes | `hdfs dfsadmin -report` | |
| Nœuds YARN | `yarn node -list` | |
| Applications YARN | `yarn application -list -appStates ALL` | |
| Processus Hadoop locaux | `jps` | |
| Tunnel NameNode / YARN | `ssh -i ma-cle.pem -N -L 9870:localhost:9870 -L 8088:localhost:8088 hadoop@DNS_PUBLIC_DU_MASTER` | |
| Proxy SOCKS | `ssh -i ma-cle.pem -N -D 8157 hadoop@DNS_PUBLIC_DU_MASTER` | |
| Trouver le jar Streaming | `find /usr/lib /usr/share -name 'hadoop-streaming*.jar' 2>/dev/null | head` |
| Lancer MapReduce Streaming | `hadoop jar CHEMIN_STREAMING.jar -files mapper.py,reducer.py -input s3:BUCKET/input/ -output s3:BUCKET/output/ -mapper “python3 mapper.py” -reducer “python3 reducer.py”` |
Remplacez toujours `BUCKET`, `PREFIX`, `DNS_PUBLIC_DU_MASTER`, `ma-cle.pem`, `XX` et les chemins de sortie par vos valeurs réelles. Une commande qui contient encore un placeholder ne doit pas être exécutée telle quelle.
Dans ce TD, vous avez créé et supprimé un cluster manuellement. Dans le TD3, vous étudierez l’automatisation de cette infrastructure.
Répondez à la question suivante :
Que faudrait-il automatiser dans ce que vous venez de faire à la main ?
Dressez une liste ordonnée d’au moins huit éléments. Pensez aux paramètres du cluster, à la sécurité, au réseau, aux rôles IAM, aux chemins S3, au lancement du job, à la collecte des résultats, au dimensionnement et au nettoyage.
Puis classez chaque élément selon sa nature :
| Élément à automatiser | Paramétrage | Provisionnement | Exécution | Vérification / nettoyage | Risque en cas d’erreur |
|---|---|---|---|---|---|
Remettez un compte rendu court contenant :
Dernière vérification avant de quitter AWS : votre cluster est terminé, vos instances de test ne tournent plus, et les objets S3 restants correspondent exactement à la consigne de l’enseignant.