Hadoop et Ansible – épisode 1 : HDFS

A l’air du tout automatique, penchons-nous sur une méthode qui fait ses preuves chez nos clients : incorporer Ansible dans les déploiements Big Data.

Pour cette série d’articles nous allons voir comment nous automatisons nos déploiements Big Data avec Ansible.

Episode 1 : HDFS

Contexte

Nous intervenons la majeure partie du temps sur des environnements sécurisés par Kerberos. Les clusters sont reliés à l’AD de l’entreprise et permettent donc une authentification sur les différents services du cluster.

Nous avons développé des rôles avec différents modules Ansible connus, tel que raw, shell ou command. Nous sommes aussi en cours d’écriture de nos propres modules Ansible Big Data. 

Antinomie du distribué pour Ansible

Ansible repose sur le principe de parallélisation des tâches. Cela s’applique bien à des fermes d’instances cloud ou à des ensembles de VMs. Ici, avec Hadoop, le seul point d’entrée se fait par un client HDFS situé sur un serveur edge ; qui communique avec le Namenode.

Notre parti pris est d’utiliser Ansible exclusivement pour appeler un client HDFS. Ce qui ne permet pas de paralléliser les tâches pour un même cluster. En revanche, cela permet de provisionner à la chaîne des arborescences et de profiter des points fort d’Ansible : simplicité et efficacité.
Pour cela, nous veillons à appeler les playbooks sur les edges et à spécifier la propriété  : run_once: yes 

Kerberos

Afin de s’authentifier sur le cluster “kerberisé”, nous utilisons le module shell ou raw (selon les besoins) pour transférer un keytab valide sur le serveur qui exécute le client HDFS. Une fois nos actions effectuées sur HDFS, nous nous assurons que le keytab ne reste pas. Avec le module file, on le supprime. Voici en résumé ce que cela donne : 

Keytab Ansible

Ici vous pouvez remarquer l’utilisation des tags Ansible. Les tags “always” permettent une exécution des modules à chaque appel du playbook. Les tags sont très utiles pour lancer une partie des tâches d’un playbook. La doc est par ici : Ansible tags

Qu’est ce qu’un “keytab” ? Comment on l’utilise ? Comment on le génère ? Cet article vous expliquera tout : générer un keytab

Arborescence HDFS

Une fois le keytab accessible, nous faisons un kinit avec un keytab sur la machine distante, et lancons les commandes hdfs nécessaire au déploiement. Une idée de ce qu’on peut faire :

Ansible arbo

Sécurisation des répertoires : ACLs HDFS

Dans la même mesure, nous mettons en place une sécurité spécifique sur les répertoires déployés. Pour cela nous utilisons la commande hdfs setfacl pour spécifier les accès. Voici ce que cela peut donner :

Ansible ACL

Aller plus loin…

Dans ces exemples, il n’y a pas de gestion d’idempotence. Cela peut être fait grâce à des vérifications de type when: ou changed_when:

Dans un futur proche, nous gérerons mieux l’idempotence grâce à notre propre module HDFS Ansible. Un article y sera consacré !

Si vous êtes intéréssé par ces problématiques, n’hésitez pas à nous contacter, sur notre site, ou sur twitter via @cyresgroupe

 

Explore, enrich, make data yours !