paint-brush
Intégration d'Apache Druid et d'Apache Superset avec MinIOpar@minio
8,990 lectures
8,990 lectures

Intégration d'Apache Druid et d'Apache Superset avec MinIO

par MinIO12m2023/08/23
Read on Terminal Reader

Trop long; Pour lire

Préparez-vous à être étonné de la rapidité avec laquelle vous pouvez créer une pile d'analyse et de visualisation hautes performances avec des produits open source.
featured image - Intégration d'Apache Druid et d'Apache Superset avec MinIO
MinIO HackerNoon profile picture
0-item
1-item
2-item

Les entreprises d'aujourd'hui ont besoin de données précises et actualisées pour pouvoir prendre des décisions. Des applications basées sur les données et des tableaux de bord construits sur des données de séries chronologiques se trouvent dans toutes les entreprises. Une grande partie des données commerciales sont des séries chronologiques : depuis les mesures des systèmes et des applications jusqu'aux conditions météorologiques, en passant par les cours des actions, la télémétrie réseau et les capteurs IoT, toutes reposent sur une analyse et une visualisation complexes de séries chronologiques pour fournir des informations commerciales.


Il existe de nombreuses bases de données conçues pour ce type d'analyse, telles que Clickhouse (pour en savoir plus sur Clickhouse et MinIO, voir Intégration de ClickHouse avec MinIO ), Snowflake, TimeStream et RedShift d'Amazon et Apache Druid. Un flux de travail typique consiste à collecter des données, probablement diffusées en temps réel ou extraites d'un lac de données, à les transformer et à les ingérer en base de données, puis à créer des applications et des tableaux de bord à l'aide de requêtes SQL exécutées sur la base de données.


Cet article de blog se concentre sur Apache Druid , en particulier sur la façon d'exécuter Druid avec MinIO comme stockage profond. Nous y reviendrons plus en détail plus tard, mais en bref, Druid enregistre les données dans le stockage profond S3 et les échange dans et hors de la mémoire locale selon les besoins lors de l'exécution de requêtes. Nous allons installer MinIO, installer Druid, modifier certains fichiers de configuration pour indiquer à Druid d'utiliser MinIO, puis importer des données de démonstration et les visualiser à l'aide d'Apache Superset .


Préparez-vous à être étonné de la rapidité avec laquelle vous pouvez créer une pile d'analyse et de visualisation hautes performances avec des produits open source.


Pile d'analyse et de visualisation

Aperçu du Druide

Druid est l'un des magasins de données les plus rapides du marché : il a été conçu pour combiner les avantages des entrepôts de données, des bases de données de séries chronologiques et des systèmes de recherche. Druid obtient des réponses aux requêtes extrêmement rapides en combinant les caractéristiques clés de ces trois systèmes dans sa couche d'ingestion, son format de stockage, sa couche de requête et son architecture de base. Druid est généralement déployé avec d'autres technologies open source telles qu'Apache Kafka, Apache Flink et se situe entre une couche de stockage ou de traitement et l'utilisateur final, servant de couche de requête pour les charges de travail analytiques. Pour en savoir plus sur le fonctionnement de Druid, veuillez consulter Apache Druid 101 .


Druid est cloud natif et s'appuie sur une architecture basée sur des microservices. Chaque service principal de Druid (ingestion, requête, coordination) peut être déployé et mis à l'échelle indépendamment dans des conteneurs ou sur du matériel standard. De plus, les services Druid peuvent échouer et redémarrer indépendamment ou être mis à jour sans affecter les autres services.


Druid a plusieurs types de processus :


  • Les processus du coordinateur gèrent la disponibilité des données sur le cluster.

  • Les processus Overlord contrôlent l’attribution des charges de travail d’ingestion de données.

  • Les processus du courtier gèrent les requêtes des clients externes.

  • Les processus de routeur sont facultatifs ; ils acheminent les demandes vers les courtiers, les coordinateurs et les suzerains.

  • Les processus historiques stockent des données interrogeables.

  • MiddleManager traite les données ingérées.

    Ces processus sont généralement déployés en groupes sur trois types de serveurs ou de nœuds différents :


  • Master : Exécute les processus Coordinateur et Overlord, gère la disponibilité et l'ingestion des données.
  • Requête : exécute les processus Broker et facultatifs du routeur, gère les requêtes des clients externes.
  • Données : exécute les processus historiques et MiddleManager, exécute les charges de travail d'ingestion et stocke toutes les données interrogeables.


Types de processus du Druide


Druid a trois dépendances externes majeures : le stockage profond, le stockage des métadonnées et ZooKeeper. En bref, les métadonnées sont utilisées pour suivre l'utilisation des segments et les informations sur les tâches, et sont généralement gérées par PostgreSQL ou MySQL. Zookeeper est utilisé pour la découverte et la coordination des services internes.


Comme il s'agit du blog MinIO, nous allons nous concentrer sur le stockage profond. Le stockage profond est un système de fichiers partagé accessible par chaque serveur Druid où les données sont stockées après leur ingestion. Dans un déploiement sur un seul serveur, il s'agit simplement d'un lecteur local. Dans les déploiements en cluster, le stockage approfondi prendrait la forme d'un magasin d'objets distribués comme S3 ou MinIO, HDFS ou d'un système de fichiers monté en réseau.


Le stockage profond est la façon dont Druid transfère les données entre les processus et sauvegarde les données. Druid stocke les données dans des fichiers appelés segments. Il existe un mappage interne qui extrait les segments du stockage profond pour les mettre en cache sur les disques locaux et en mémoire. Afin de minimiser la latence, les requêtes sont exécutées sur les segments localement, et non sur les segments stockés dans le stockage profond. Le stockage profond permet la conception élastique et tolérante aux pannes de Druid. Druid offre une durabilité en s'amorçant à partir d'un stockage profond dans le cas où un nœud de données tombe en panne et redémarre. Une mise en garde est que vous aurez besoin de suffisamment d'espace libre sur les nœuds de données et dans un stockage profond pour les données avec lesquelles vous souhaitez travailler dans Druid.


Druid utilise l'API S3 pour le stockage d'objets pour un stockage profond. L'utilisation du stockage d'objets compatible avec l'API S3, tel que MinIO, vous donne la liberté d'exécuter Druid n'importe où, ce que vous souhaiterez peut-être faire pour améliorer les performances et la sécurité. MinIO est un superbe stockage profond pour Druid car il offre une excellente compatibilité S3, des performances permettant de répondre aux exigences d'OLAP en temps réel et, peut-être surtout, la capacité de fournir des performances à grande échelle. MinIO assure également la protection des données et la gestion du cycle de vie nécessaires.


Vous pouvez exécuter Druid, MinIO et Superset directement sur Linux ou dans des conteneurs sur Docker ou Kubernetes. Il existe déjà d'excellentes ressources qui vous montrent comment faire fonctionner Druid. Si, pour une raison quelconque, cet article de blog ne vous satisfait pas, consultez Apache Druid Quickstart pour Linux, Docker · Apache Druid pour Docker et Clustered Apache. Druid® sur votre ordinateur portable pour Kubernetes.

Installation de MinIO

Si vous n'exécutez pas déjà MinIO, voici les instructions d'installation . Le processus est décrit en détail dans le Guide de démarrage rapide MinIO .


Sous Linux, par exemple, téléchargez MinIO et exécutez-le (n'hésitez pas à changer le mot de passe root - et mémorisez-le) :


 wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server /mnt/data --console-address ":9001"


Lancez un navigateur et connectez-vous au serveur MinIO à http://<your-IP-address>:9000 en utilisant l'utilisateur root et le mot de passe que vous avez configurés précédemment.


La première fois que vous vous connectez, vous serez redirigé vers la page Buckets.


Page des seaux


Créez le bucket druidbucket .


Création du compartiment


Dans le monde réel, vous souhaiteriez probablement sécuriser l'accès à vos données Druid, mais nous n'avons pas besoin de le faire dans notre laboratoire. Vous créeriez un compte de service (sous le menu Identité), modifieriez la politique utilisateur pour autoriser uniquement l'accès à druidbucket et, dans la configuration Druid ci-dessous, utiliseriez la clé d'accès et la clé secrète du compte de service.

Installation de Druide

Le moyen le plus simple de tester Druid est via Docker. Suivez les instructions Docker · Apache Druid et utilisez ce docker-compose.yaml . Cela crée un conteneur pour chaque service Druid, ainsi que Zookeeper et PostgresSQL. Cette méthode utilise un fichier d'environnement pour spécifier la configuration Druid. Téléchargez ce fichier là où vous avez enregistré les conteneurs de Druid. Pour les instructions ci-dessous (Configurer Druid pour MinIO), vous pouvez modifier le fichier d'environnement pour transmettre les variables aux fichiers de configuration Druid standard ou modifier les fichiers de configuration directement dans le conteneur.


Démarrez Druid avec docker-compose up . Une fois le cluster affiché, ouvrez un navigateur et accédez à http://localhost:8888 pour utiliser la console Druid.


Installation de Druide

Configurer Druid pour MinIO

Il est maintenant temps de configurer Druid pour qu'il utilise MinIO pour le stockage en profondeur. Dans cette étape, vous devrez modifier les fichiers de configuration Druid (ou les fichiers d'environnement Docker comme décrit ci-dessus) pour référencer MinIO, puis redémarrer Druid. Le processus est entièrement décrit dans Comment configurer Druid pour utiliser Minio comme stockage profond - DZone Big Data et nous incluons ici une version abrégée pour référence rapide.


Selon la façon dont vous avez installé Druid, dans le fichier conf/druid/_common/common.runtime.properties , ajoutez "druid-s3-extensions" à druid.extensions.loadList . Ajoutez des extensions par nom, entre guillemets et séparées par une virgule, par exemple :


 druid.extensions.loadList=["druid-parser-route", "druid-s3-extensions"]


Selon l'article référencé ci-dessus, l'extension S3 pour le stockage en profondeur repose sur des jets3t sous le capot. Vous devez créer un fichier jets3t.properties sur le chemin de classe. Pour cet exemple, nous allons créer un nouveau jets3t.properties dans le répertoire conf/druid/_common avec ce qui suit :


 s3service.s3-endpoint=localhost s3service.s3-endpoint-http-port=9000 s3service.disable-dns-buckets=true s3service.https-only=false


Maintenant, commentez les configurations pour le stockage local dans la section « Deep Storage » et ajoutez les valeurs appropriées pour Minio. Dans mon cas, j'exécute MinIO sur la même machine que Druid, donc l'URL du point de terminaison S3 inclut localhost et un port. Si vous exécutez sur une autre machine ou dans un conteneur, vous devrez modifier cette ligne pour adresser MinIO dans votre environnement.


Après cela, la section « Deep Storage » devrait ressembler à :


 # # Deep storage # # For local disk (only viable in a cluster if this is a network mount): # druid.storage.type=local # druid.storage.storageDirectory=var/druid/segments # For HDFS: # druid.storage.type=hdfs # druid.storage.storageDirectory=/druid/segments # For S3: druid.storage.type=s3 druid.storage.bucket=druidbucket druid.storage.baseKey=druid/segments druid.s3.accessKey= <insert your MinIO accessKey> druid.s3.secretKey= <insert your MinIO secretKey> druid.s3.protocol=http druid.s3.enabePathStyleAccess=true druid.s3.endpoint.signingRegion=us-east-1 druid.s3.endpoint.url=http://localhost:9000/


Nous allons également configurer Druid pour stocker les journaux du service d'indexation dans Minio. C'est une bonne pratique de tout stocker au même endroit pour faciliter la recherche - Druid est déjà assez compliqué sans avoir à rechercher les journaux à plusieurs emplacements. Mettez à jour la section « Indexation des journaux de service » avec les valeurs appropriées dans conf/druid/_common/common.runtime.properties .


Après cela, la section « Indexation des journaux du service » devrait ressembler à :


 # Indexing service logs # For local disk (only viable in a cluster if this is a network mount): # druid.indexer.logs.type=file # druid.indexer.logs.directory=var/druid/indexing-logs # For HDFS: # druid.indexer.logs.type=hdfs # druid.indexer.logs.directory=/druid/indexing-logs # For S3: druid.indexer.logs.type=s3 druid.indexer.logs.s3Bucket=druidbucket druid.indexer.logs.s3Prefix=druid/indexing-logs


D'ACCORD! Cela couvre toutes les modifications de configuration à apporter à Druid. Enregistrez le fichier et redémarrez votre cluster. Lorsque vous travaillez avec Druid, vous verrez des segments et des indices écrits dans druidbucket .

Installation du superset Apache

Apache Superset est un outil de visualisation puissant fréquemment utilisé avec Druid. Superset est une application de business intelligence cloud native qui est rapide, légère, riche en fonctionnalités et, mieux encore, gratuite ! L'interface intuitive de Superset rend la création de tableaux de bord interactifs relativement simple. Superset fournit une prise en charge prête à l'emploi pour la plupart des bases de données SQL. Superset s'intègre aux backends d'authentification tels que la base de données, OpenID, LDAP et OAuth pour sécuriser les visualisations.


En tant que logiciel cloud natif, Superset est hautement évolutif et hautement disponible. Il a été conçu pour s'adapter à de grands environnements distribués.


Nous sommes plus intéressés par démarrer avec Superset que par sa mise à l'échelle en production, nous allons donc effectuer l'installation la plus simple possible à l'aide de Docker Compose . C'est le moyen le plus rapide d'essayer Superset sous Linux ou Mac OSX.


Si Docker n'est pas déjà installé, veuillez suivre les instructions de Docker . Une fois que vous avez installé Docker, veuillez installer Docker Compose .


Ouvrez une fenêtre de terminal et clonez le dépôt Superset :


 $ git clone https://github.com/apache/superset.git


Cela créera un dossier sur-ensemble dans votre répertoire actuel. Accédez à ce répertoire et exécutez les commandes suivantes (ce qui peut prendre plusieurs minutes) :


 $ docker-compose -f docker-compose-non-dev.yml pull $ docker-compose -f docker-compose-non-dev.yml up


Vous verrez beaucoup de texte d'initialisation passer sur votre terminal. Le superset est prêt une fois que vous voyez quelque chose comme ceci :


 superset_app | Loaded your LOCAL configuration at [/app/docker/pythonpath_dev/superset_config.py] superset_app | 127.0.0.1 - - [12/May/2022:23:59:35 +0000] "GET /health HTTP/1.1" 200 2 "-" "curl/7.74.0"


Ouvrez un navigateur et accédez à http://localhost:8088 pour accéder à Superset. Connectez-vous avec le nom d'utilisateur par défaut « admin » et le mot de passe « admin ».


Après vous être connecté à Superset, vous devez le connecter à Druid. En haut à droite, cliquez sur le « + » pour ajouter une base de données.


Connexion à Druide


Dans la liste déroulante, sélectionnez Apache Druid. Nommez ensuite la connexion et entrez ce qui suit sous SQLALCHEMY URI, en veillant à mettre à jour l'adresse IP ou à la remplacer par localhost si nécessaire. Si nous avions protégé l'API Druid en exigeant une authentification, nous saisirions également un nom d'utilisateur et un mot de passe.


 druid://10.0.0.10:8888/druid/v2/sql


Testez la connexion pour vous assurer qu'elle fonctionne, puis cliquez sur Terminer.


Test de connexion


Woo-hoo ! Druid, MinIO et Superset fonctionnent désormais dans votre environnement.


Avec le triumvirat Druid, SuperSet et MinIO, nous pouvons avoir une vue complète et opportune des données en temps réel. De nombreuses organisations ont créé des applications de gestion de données à l'échelle du Web en s'appuyant sur cette combinaison pour l'analyse des flux de clics (analyse Web et mobile), l'analyse des risques/fraudes, l'analyse de télémétrie réseau (surveillance des performances du réseau), l'analyse de la chaîne d'approvisionnement (métriques de fabrication). et les mesures de performances des applications.


Cette pile d'analyse et de visualisation cloud native est flexible et extensible, évolutive et performante afin que vous puissiez créer des applications qui ravissent vos utilisateurs. Donnez-leur le pouvoir de surveiller, d’analyser et de visualiser les données en temps réel. Laissez-les découper, filtrer et regrouper selon n'importe quelle combinaison de colonnes afin qu'ils puissent prendre des décisions concluantes, orientées vers l'action, basées sur les données, au rythme des exigences de l'entreprise.

Mettre tous ensemble

Afin de démontrer un peu les fonctionnalités que nous avons créées, nous allons charger un fichier de données didacticiel des modifications de Wikipédia au fil du temps dans Druid, puis visualiser les modifications dans SuperSet. N'oubliez pas que cela est soutenu par MinIO en tant que stockage profond. Les modifications de Wikipédia sont traitées plus en détail dans Quickstart · Apache Druid .

Ingestion dans Druide

Druid charge les données en soumettant une spécification de tâche d'ingestion en JSON au serveur Overlord. Vous pouvez créer une spécification d'ingestion à l'aide de l'interface graphique Web ou l'écrire vous-même et la planifier. Une fois que vous avez créé et réglé une spécification d'ingestion, vous pouvez réutiliser le JSON afin de ne pas avoir à répéter la tâche. En production, les équipes planifient et automatisent fréquemment l’ingestion.


Ouvrez un navigateur et chargez l'interface Web Druid à l' adresse http://localhost:8888 .


Chargement de l'interface Web Druide


En haut de la fenêtre, cliquez sur Charger les données. À partir de là, sélectionnez Exemples de données, puis sélectionnez Modifications Wikipédia dans la liste déroulante de droite et cliquez sur le bouton bleu Charger l'exemple.


Chargement des données


L'interface graphique Web vous guide dans la création d'une spécification d'ingestion qui lira les données d'une source et les stockera dans des segments sur un stockage profond. L'ingestion est basée sur un horodatage utilisé pour partitionner et trier les données, tandis que les données sont stockées sous forme de colonnes de dimensions et de métriques. Pour plus d'informations sur la façon d'optimiser les performances d'ingestion, veuillez consulter Modélisation des données et performances des requêtes dans Apache Druid .


Avec les données du didacticiel, nous allons simplement cliquer sur le workflow d'ingestion en acceptant les valeurs par défaut, ou cliquer sur Modifier la spécification JSON, puis sur Soumettre. Si vous le souhaitez (ou en avez besoin), vous pouvez consulter le fichier brut au format JSON et l'analyser. Druid crée sa propre colonne de temps appelée __time pour organiser et segmenter les données. Parce que le temps est si important pour Druid, il est très efficace pour comprendre comment gérer les horodatages quel que soit leur format. De plus, nous pouvons transformer les données et optimiser les performances des requêtes en partitionnant les données et en dimensionnant les segments. Enfin, vous pouvez régler la tâche d'ingestion en termes de threads et d'utilisation de la mémoire, puis la planifier et l'exécuter.


Réglage de la tâche d'ingestion


L'interface graphique vous envoie afficher les tâches :


Affichage des tâches


Il s'agit d'un très petit travail d'ingestion, il se termine donc presque immédiatement.


À partir de là, vous pouvez exécuter des requêtes sur les données dans Druid et obtenir des réponses ultra-rapides. Vous pouvez exécuter des requêtes via l'interface graphique Web ou l'API. Druid se retrouve derrière de nombreux tableaux de bord en raison de sa capacité à fournir d'excellentes performances de requête sur d'énormes quantités de données à grande échelle.


Utiliser des requêtes sur des données

Visualisation dans Superset

Revenez au navigateur dans lequel vous vous êtes connecté à Superset et cliquez à nouveau sur le «+» en haut à droite de l'écran d'accueil. Cliquez ensuite sur Graphique.


Visualisation dans Superset


Nous pourrions exécuter des requêtes SQL individuelles en bas de l'écran. Les tableaux de bord sont des groupes de requêtes individuelles. Les réponses aux requêtes répétitives sont mises en cache dans Superset pour améliorer les performances.


Sélectionnez l'ensemble de données druid.wikipedia , puis sélectionnez une visualisation. Superset comprend un certain nombre de visualisations de séries chronologiques. Nous allons choisir Graphique de séries chronologiques, puis cliquer sur Nouveau graphique.


Création d'un nouveau graphique


Au début, vous ne verrez aucun résultat, mais ne vous laissez pas tromper. Tout d’abord, supprimez la plage de temps en la définissant sur « pas de filtre ». Le Time Grain est réglé trop haut sur « jour », alors changez-le sur « 5 minutes ». Nous visualisons maintenant un graphique du nombre de modifications de Wikipédia effectuées dans des fenêtres de 5 minutes dans nos exemples de données.


Représentation des données


Vous pouvez filtrer et regrouper les résultats à l'aide de Superset. Pour enregistrer le graphique, cliquez sur Enregistrer en haut de l'écran, puis donnez un nom au graphique et enregistrez-le.


Filtrage et regroupement des résultats à l'aide de Superset


Vous avez maintenant appris les étapes de base pour installer Druid et MinIO, ingérer votre premier ensemble de données et générer votre premier graphique Superset. Une prochaine étape utile pourrait consister à en savoir plus sur l'exploration des données dans un superensemble .

Analyses massivement évolutives

Dans cet article de blog, nous avons présenté un groupe d'applications cloud natives : Apache Druid pour l'analyse, Apache Superset pour la visualisation et MinIO pour le stockage profond S3. Cette démo simple est le début de la création d'une pile d'analyse et de visualisation cloud native, et peut être étendue avec Apache Spark pour ML ou Jupyter pour la science des données.


Merci d'avoir lu cette démo. Si vous avez des questions, envoyez-nous un e-mail à [email protected], ou rejoignez la chaîne Slack MinIO et posez-les.


Également publié ici .