Nifi est le dernier né des solutions d’intégration de données. Par rapport aux solutions existantes, Nifi offre de nombreuses avancées que nous allons présenter dans ce billet.

Panorama des solutions existantes d’intégration de données

Depuis le début du Big data, les éditeurs ont proposé des solutions d’intégrations de données. Les plus célèbres se nomment Scoop, Flume et Kafka. Plutôt que de parler de solutions, on devrait plutôt utiliser le terme d’utilitaires: ces produits sont simples et dédiés généralement à un besoin.

Sqoop permet d’importer des données d’une base relationnelle sur HDFS. Son atout principal est de pouvoir faire de l’import incrémental. Il peut aussi exporter des données sous HDFS vers une base relationnelle cible. D’un point de vue technique, scoop repose sur Map Reduce: les gros volumes ne lui font pas peur mais dans tous les cas, on a de la latence au démarrage d’un process.

Kafka est la solution de gestion de messages. Techniquement, un message est une information basique avec un entête, le corps du message et un timestamp. On crée des « topics » dans lesquelles certaines applications viennent publier leurs messages tandis que d’autres applications vont venir s’abonner pour récupérer les messages. Kafka est une solution très légère qui permet de traiter des milliers (millions) de messages par seconde. Par nature, Kafka fonctionne en temps réel. Techniquement, il faut développer des applications java pour publier ou récupérer des messages. Certains outils comme Spark intègre nativement des connecteurs à Kafka .

Flume est peut-être la solution la plus large fonctionnellement. Son fonctionnement est basée sur une source, une cible avec au milieu un « channel », une zone tampon pour stocker temporairement les données. Créée initialement pour « écouter » des fichiers de type logs, Flume peut se connecter aujourd’hui à différentes sources (un répertoire, logs syslog, un flux réseau ou même un flux twitter. Flume peut écrire dans différentes cibles même si sa cible privilégiée est HDFS. Flume fonctionne en mode streaming. Techniquement, il suffit de configurer un agent puis de l’exécuter sur une ou plusieurs machines de notre cluster

Installation de Nifi

Intégré au sein de l’offre HDF d’Hortonworks, la solution est disponible en open source et peut s’installer potentiellement sur toutes les plaformes. Le produit fonctionne en mode cluster et ne nécessite même pas techniquement Hadoop.

Projet Nifi

On télécharge le produit.

Download Nifi

On sélectionne la version nifi-1.0.0-bin.tar.gz.

Je vais installer le produit sur une distribution Hortonworks 2.3.1 (version sandbox) qui tourne dans une machine virtuelle sur ma machine. Après décompression du fichier, je copie le fichier dans le home de mon utilisateur.

Je vais commencer par installaer java 8 puis extraire les fichiers de l’archive tar.

tar -xvf nifi-1.0.0-bin.tar

Par défaut, Nifi utilise le port 8080. Comme ce port est déjà utilisé par Ambari, je vais paramétrer Nifi pour qu’il utilise le port 8085. Pour cela, on modifie la valeur de nifi.web.http.port dans le fichier nifi-1.0.0/conf/nifi.properties. Puis on va installer Nifi comme un service avec la commande suivante (avec les droits d’administrateur): nifi-1.0.0/bin/nifi.sh install

Pour lancer le service Nifi: service nifi start

Pour arrêter le service Nifi: service nifi stop

Le service Nifi va démarrer sur le port 8085. N’oubliez pas de rajouter une redirection de port au niveau de la machine virtuelle sous peine de na pas pouvoir accéder à l’outil.

Nifi Redirection de port

Le démarrage nécessite aussi quelques secondes (voir dizaines de secondes).

L’interface graphique de Nifi

La principale nouveauté de Nifi saute aux yeux: Nifi se présente sous la forme d’une belle interface graphique accessible avec un simple navigateur web. On quitte la ligne de commande de sqoop ou le fichier de configuration austère de Flume.

Les connecteurs sous Nifi s’appellent processeurs. On les glisse dans notre fenêtre de travail puis on les paramètre. Pour un traitement minimal, on va configurer trois processeurs: un processeur pour collecter des données issues de Twitter, un processeur pour collecter des centaines de lignes de données dans un seul fichier cible et enfin un processeur pour écrire les données sur disque. Voici l’exemple du traitement Nifi destiné à l’analyse des données Twitter pour l’élection de Miss France 2017.

Traitement Nifi

Parametrage Twitter

Ce traitement m’a permis de collecter près de 470 000 tweets représentant 2,3 Go de data.

L’interface fait penser aux interfaces des ETL mais la logique de Nifi est bien différente. Les possibilités de transformation sont principalement restreintes au changement de format. Le but de la solution n’est pas d’appliquer des règles de gestion complexes mais de véhiculer simplement et rapidement des données d’un point A vers un point B. En fonctionnement natif, les données sont traitées ainsi en temps réel. A charge de l’application cible d’appliquer les règles de gestion souhaitées. C’est tout à fait dans la logique des applications Big Data dans lesquelles on cherche à avoir des données sources les plus « pures » possibles, sans transformation susceptible d’introduire une perte d’informations.

Nifi: le hub d’intégration Big Data

Nifi a été imaginé pour les objets connectés: une solution temps réel adaptable via des connecteurs à une pléthore de nouveaux protocoles spécialisés. Les développeurs ont tenu compte de l’existant et Nifi s’est donc ouvert à des choses plus traditionnelles:

  • les bases de données
  • les messages
  • les fichiers
  • les flux twitter

Nifi devient donc un véritable hub d’intégration Big Data en permettant de collecter en temps réel des données issues de sources très diverses. Dans ces conditions, quel est l’intérêt de maintenir des solutions alternatives ? Bien faible d’après moi. L’un de mes clients a d’ailleurs sauté le pas et a remplacé ses traitements sqoop, kafka et flume par Nifi.

Nifi rationalise les processus d’intégration de données. Nifi sait gérer les architectures en Y: c’est une solution vraiment intéressante pour alimenter à partir d’un flux unique une chaîne chaude par exemple sous MongoDB et une chaine froide sous Hadoop. Si l’une des cibles n’est plus accessible, Nifi va conserver les données le temps que la cible soit de nouveau en ligne. On peut également utiliser Nifi pour alimenter en Y deux clusters Hadoop en parallèle. C’est la méthode préconisée pour la mise en oeuvre d’un PRA sur Hadoop. Le fait d’être agnostique par rapport à la nature des données en entrée est un avantage important par rapport à des solutions spécialisées.

J’espère vous avoir donné envie d’en savoir plus sur cette solution. Est ce que c’est la solution ultime ? Son adoption rapide par les clients est une preuve que le produit est matûre et répond à des besoins. Son adoption par Cloudera serait un signe très fort mais pour ça, il va falloir encore attendre quelques mois…