Hadoop et Ansible – épisode 2 : Module Ansible HDFS

Par Antoine Pointeau - 21 juin 2017

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 2 : Module Ansible HDFS

Contexte

Précédemment nous vous parlions d’une méthode que nous avons mise en place, afin de provisionner Hdfs grâce à des tâches Ansible. Retrouvez l’épisode en question ici.

Depuis nous avons travaillé sur des modules Ansible Hdfs afin de profiter de l’idem potence, d’accélérer le développement et rendre nos playbooks / rôles plus lisibles.

Module : hdfs_file

Le premier besoin qui s’est fait ressentir a été d’avoir un module similaire à celui natif d’Ansible : « file ».

Nous allons vous présenter notre module « hdfs_file », nous prévoyons également dans un futur proche les modules : « hdfs_acl » et « hdfs_copy/put ».

Interaction avec le service hdfs

Le paquet python « hdfs » fût dans un premier temps un bon candidat. Finalement, cette méthode s’est vite montrée trop contraignante. Elle nous obligeait:

  • L’installation du paquet python chez l’hôte avant l’utilisation du module
  • La récupération des configurations Hdfs chez l’hôte ou complexifier les paramètres du module.
  • La maintenance fréquente du module pour correspondre aux différentes versions d’Hdfs sur le cluster cible.
  • La prise en charge éventuelle d’un ticket Kerberos (en fonction de la configuration du cluster).

A la vue de toutes ces contraintes, l’interaction avec l’interface de commande Hdfs (« bin/hdfs dfs »), malgré quelques défauts, s’est retrouvée sous les projecteurs. Cette solution nous permet de partir du principe que : « si la Command Line Interface fonctionne, notre module aussi ». Cette propriété nous facilite grandement la résolution de problème éventuels de connexion avec le cluster. Nous avons donc naturellement fixé nos positions sur cette solution.

Options du module

Nous avons repris l’esprit du module ‘file’ natif en supprimant les options liées à selinux et aux liens symboliques puis nous y avons ajouté le paramètre réplication, spécifique à Hdfs. Afin de faciliter l’utilisation du module, nous avons essayé de coller au plus près du bultin, voici à quoi cela ressemble:

parameterrequireddefaultchoicescomments
groupnoName of the group that should own the file/directory, as would be fed to chown.
methodnocommandcommand
library
If `command`, this module will manage with the hdfs CLI. If `library`, this module will manage with the hdfs python module.
modenoMode the file or directory should be. For those used to /usr/bin/chmod remember that modes are actually octal numbers /usr/bin/chmod remember that modes are actually octal numbers due to CLI limitation (cannot get file mode)
ownernoName of the user that should own the file/directory, as would be fed to chown.
pathyesThe hdfs absolute path being managed
recursenonoThe module will recursively set the specified file attributes (applies only to state=directory)
replicationnoThe replication factor of a file/directory, please not that setting the replication on a directory is always apply recursivly.
statenofilefile
directory
touch
absent
If `directory`, all immediate subdirectories will be created if they do not exist, they will be created with the supplied permissions. If `file`, the file will NOT be created if it does not exist, see the `hdfs_copy` module if you want that behavior. If `absent`, directories will be recursively deleted, and files will be unlinked. Note that `hdfs_file` will not fail
if the path does not exist as the state did not change. If `touch`, an empty file will be created if the path does not exist, while an existing file will receive updated file access and modification times (directories stay untouch). Please note that touch update file owner, group, mode and replication, you should set this param explicitly to replace them.

Exemple :

Pour finir voici un petit exemple d’utilisation de notre module afin d’illustrer nos propos.

Exemple d'utilisation du module custom hdfs.

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

Taggué avec
Antoine Pointeau

Antoine Pointeau

Passionné de programmation, d'indentation et de best pratices. Mes sujets préférés sont : le python, la data science, la sécurité et l'impression 3d

Page Linkedin Cyrès

Facebook

Twitter

Calendrier

juillet 2017
LMMJVSD
« Juin  
 12
3456789
10111213141516
17181920212223
24252627282930
31