Création d'un cluster Hadoop TDP sur AWS

Avertissement

Le projet TDP ayant évolué depuis la rédaction de cet article, l’utilisation des sources pour ce déploiement nécessitera une adaptation.

Après plusieurs années à utiliser l’image CDH fournie par Cloudera pour dispenser des cours d’introduction au Big Data, la mise à jour de mon cluster Hadoop de démonstration devenait nécessaire. Malheureusement, Cloudera a choisi de ne plus mettre à disposition d’image Quickstart. Impossible donc d’avoir un cluster à jour et j’ai dû me contenter d’un CDH en version 5.13.0 (date de sortie : 12 octobre 2017).

Puis j’ai entendu parler du projet Trunk Data Platform (TDP). Ce projet propose les outils Big Data principaux basés sur l’écosystème Apache, il a l’avantage d’être open source et d’être déployable sur plusieurs serveurs comme le serait un cluster Hadoop standard.

À l’heure actuelle, TDP est principalement maintenu par l’association TOSIT mais est ouvert à toute contribution au travers de leurs différents projets publics. Afin de faciliter l’utilisation, ils ont d’ailleurs mis en place un projet TDP - Getting started. Celui-ci permet de créer un cluster Hadoop sur des machines virtuelles locales à partir de n’importe quelle machine Linux disposant d’un minimum de puissance (32 Go de mémoire recommandé tout de même).

TDP allait donc me permettre de disposer d’un cluster Hadoop à jour ! Néanmoins, la contrainte de disposer d’un ordinateur avec 32 Go de mémoire devenait rapidement limitante. J’ai donc décidé de déporter ce cluster Hadoop sur des instances EC2 hébergées sur AWS.

Pour cela, j’ai procédé en trois étapes :

  1. Déploiement de l’infrastructure avec Terraform sur AWS ;

  2. Préconfiguration de noeuds avec Ansible sur la base de l’inventaire dynamique généré à l’étape précédente ;

  3. Déploiement de TDP.

Remarque

Les sources concernant ce déploiement est disponible ici : https://github.com/siwon/tosit_tdp_aws.

Avertissement

Le projet TDP ayant évolué depuis la rédaction de cet article, l’utilisation des sources pour ce déploiement nécessitera une adaptation.

Déploiement de l’infrastructure

La première étape est de déployer l’infrastructure et pour cela, j’ai logiquement choisi Terraform.

Pour l’architecture, je me suis inspiré de ce que préconise le projet TDP - Getting started. J’ai néanmoins pris la liberté d’ajouter un nœud supplémentaire qui sera dédié aux déploiements afin notamment d’optimiser les flux réseau lors de l’installation.

Afin d’anticiper les problématiques de résilience des services, j’ai fait le choix de répartir les nœuds entre les Availability Zones disponibles dans notre région (eu-west-3 soit Paris). Attention néanmoins, la configuration du rack awareness n’a pas été réalisée.

Enfin, j’ai souhaité sécuriser les nœuds master et les nœuds worker, ceux-ci ne sont donc pas adressable publiquement, mais seulement au travers des edge nodes ou du deployer node.

Nous obtenons donc l’architecture suivante :

tdp.drawio.svg

Nous avons donc :

  • 1x deployer node

  • 1x edge node

  • 3x master nodes

  • 3x worker nodes

Le dimensionnement des instances déployées est le suivant :

Table 1. Dimensionnement des serveurs
Zone Nom Type d’instance (vCPU, Mémoire) OS Stockage (Gio)

eu-west-3a

srv-tdp-deployer-default

t3a.large (2, 8 Gio)

debian-11

8

eu-west-3a

srv-tdp-edge-000-default

t3a.large (2, 8 Gio)

centos-7

8

eu-west-3a

srv-tdp-master-000-default

t3a.large (2, 8 Gio)

centos-7

8

eu-west-3b

srv-tdp-master-001-default

t3a.large (2, 8 Gio)

centos-7

8

eu-west-3c

srv-tdp-master-002-default

t3a.large (2, 8 Gio)

centos-7

8

eu-west-3a

srv-tdp-worker-000-default

t3a.large (2, 8 Gio)

centos-7

8 + 1

eu-west-3b

srv-tdp-worker-001-default

t3a.large (2, 8 Gio)

centos-7

8 + 1

eu-west-3c

srv-tdp-worker-002-default

t3a.large (2, 8 Gio)

centos-7

8 + 1

Préparation des instances

L’infrastructure maintenant déployée, nous pouvons procéder à :

  1. La configuration du deployer node

  2. La copie des fichiers d’inventaires générés par Terraform

  3. Appliquer les prérequis au déploiement de TDP sur les edge, master et worker nodes

  4. Préparer les disques de données sur les worker nodes

L’ensemble de ces prérequis sont mis en place à l’aide d’Ansible.

Configuration du deployer

La préparation du deployer node est relativement basique est consiste à installer Ansible et récupérer l’ensemble des rôles TDP.

Copie des fichiers de configurations générés par Terraform

Contrairement au projet TDP - Getting started, l’inventaire des nœuds n’est pas généré par Vagrant. Les nœuds et adresses des serveurs sont donc variables et nous devons donc extraire ces informations du déploiement Terraform.

Pour cela, différents fichiers sont générés en sortie de Terraform :

  • deployer-default.yml : Fichier inventaire pour l’ensemble des travaux préparatoires à l’installation de TDP.

  • hosts-default.yml : Fichier listant les serveurs ainsi que leur dimensionnement permettant d’alimenter la variable hosts dans le fichier inventory/group_vars/all.yml du projet TDP - Getting started.

  • inventory-default.yml : Fichier d’inventaire dédié au déploiement des services TDP.

Ces fichiers sont donc déployés sur le serveur de déploiement afin de mettre à jour les fichiers de configuration.

Configuration du nom et du domaine des instances

Une autre différence entre l’utilisation de Vagrant et d’AWS, nous ne pouvons pas présager ou bien même forcer l’utilisation d’un hostname ou bien d’un domaine lors de la création des instances EC2.

TDP étant sensible aux noms et domaines des instances pour la génération des certificats, nous devons donc procéder à leur paramétrage.

Configuration des disques de données

La dernière étape consiste à initialiser et monter les disques additionnels déployés sur les worker nodes.

Déploiement de TDP

L’ensemble des prérequis à l’utilisation de TDP étant satisfaits, nous pouvons maintenant procéder au déploiement des services de notre cluster Hadoop.

Pour cela, il suffit de :

  1. Se connecter sur le deployer node : ssh -i /tmp/ssh-private-key-tdp-default.pem admin@<IP Publique Deployer Node>

  2. Se déplacer dans le répertoire tdp-getting-started : cd tdp-getting-started

  3. Lancer le déploiement avec Ansible Playbook : ansible-playbook deploy-all.yml

L’exécution de l’ensemble du script dure quelques minutes.

Une fois le déploiement terminé, vous pouvez vous connecter à un edge node et accéder aux différents outils proposés par TDP (HDFS, Spark, Hive, etc.).

Conclusion

Ce modeste projet de déploiement de TDP sur AWS n’a pas vocation à rendre un service de production. Néanmoins, il permet de réaliser des expérimentations et démonstrations avec une stack Hadoop à jour sans nécessiter de licence Cloudera.

Les prochaines étapes sont être :

  • Exposer les UI ;

  • Configurer le Rack Awareness.

Concernant mes cours d’introduction au Big Data, cette stack Hadoop sera parfaite pour les TPs. Il ne me reste plus qu’à adapter les sujets et le tour est joué !