Monitoring Nifi via streaming de bulletin dans Hive 3

Par - Publié le Modifié le

Contexte

Dans le cadre du suivi de production et le monitoring Nifi, je vais vous présenter un moyen que nous utilisons pour sauvegarder l’ensemble des évènements « bulletin » au sein d’un cluster Nifi.
Après avoir évoqué les enjeux, je vous présenterai l’implémentation technique ainsi qu’une alternative avec Impala.

Composants utilisés

Enjeux

Je me suis basé sur un article de Pierre VILLARD pour développer ce cas d’usage. Le monitoring Nifi est un enjeu important, mais les ressources sur la toile permettant de se faire un avis sur le sujet sont rares. J’apporte donc un peu de notre expérience dans le domaine, en passant en revue notre pipeline d’ingestion de bulletin Nifi, dans Hive 3.

Le système de bulletins Nifi est très riche en information mais reste volatile sans configuration spécifique. Pour permettre un stockage de ces données et une analyse, il est possible via un ControllerSetting d’envoyer ces fameux bulletins à un point d’entré Nifi. La récupération se fait simplement car chaque bulletin est récupéré en tant que flowfile.

Le monitoring Nifi concrètement

Pour commencer, il faut créer un Input Port au niveau 0 du plan Nifi. Puis dans le Controller Setting, créer une SiteToSiteBulletinReportingTask en spécifiant l’Input Port :

 

Monitoring nifi SiteToSiteBulletinReportingTask
ReportingTask Nifi

Ensuite j’ai créé un processGroup qui contient l’ensemble de mon cas d’usage (plus simple pour le versionning) :

InputPort
InputPort vers ProcessGroup Nifi

Et voici la pipeline d’enregistrement :

Monitoring Nifi complete pipeline
Pipeline complète d’enregistrement

Penchons-nous en détail sur ce workflow :

  1. Conversion des records transmis par notre tâche de monitoring : transformation de JSON à Avro. Pourquoi ? Car la table Hive 3 alimentée par le PutHive3Streaming, ne marche qu’avec des records en Arvo (le schéma est nécessaire).
  2. Enregistrement des records Avro dans une table Hive

    Monitoring Nifi PutHive3Streaming
    Configuration du PutHive3Streaming Nifi
  3. LogAttribute afin de sauvegarder d’éventuelle erreurs d’insertion dans Hive

 

Il est important de noter que la partie Hive n’est pas une simple table. Il est nécessaire d’avoir une table au format ORC ainsi que certains paramètres Hive pour streamer des données dans une table Hive :

Create table
Requête de création de table Hive

Je vous renvoie à un article sur la partie Hive 3 Streaming et les transactions ACID.

Alternative Impala

Si pour certaines raisons, streamer les données en temps réel dans Hive 3 n’est pas possible, voici le même workflow de monitoring Nifi pour insérer les données dans une table Impala

Monitoring Nifi Impala Workflow
Workflow équivalent vers Impala

Cette approche est encore plus simple car elle ne nécessite pas de conversion spécifique. L’utilisation d’un DBCPConnectionPool branché sur Impala via un PutDatabaseRecord fait très bien le travail.

Pour plus de détail sur la configuration de ce DBCPConnectionPool, je vous renvoie à notre premier cas d’usage Nifi.

Conclusion

Ce workflow bien que simple, met en exergue une problématique souvent rencontrée : le suivis des évènements Nifi au sein d’un ou plusieurs clusters.

Le streaming dans Hive 3 peut être intéressant dans certains cas. Il est possible via Nifi de pousser ces bulletins dans quasiment n’importe quelle destination (MongoDB, ElasticSearch, SolR, Kudu, S3, etc…) On peut même imaginer des traitements spécifiques ou des filtrages sur la provenance du bulletin. Nifi possède plusieurs autres métriques de reporting, sur lesquelles on peut facilement transposer ce système : AzureLogAnalyticsProvenanceReportingTask, ControllerStatusReportingTask, MetricsReportingTask ou encore PrometheusReportingTask

Si vous avez des questions ou souhaitez des précisions sur ce workflow, n’hésitez pas à me contacter !

« * » indique les champs nécessaires

Ce champ n’est utilisé qu’à des fins de validation et devrait rester inchangé.
Partager l'actualité sur

KEEP CALM & DataOps now