Spark Elasticsearch
Qu'est-ce que Spark Elasticsearch ?
Spark Elasticsearch est une base de données distribuée NoSQL qui stocke, extrait et gère des données orientées document et semi-structurées. Ce moteur de recherche RESTful open source repose sur Apache Lucene. Il est publié sur GitHub selon les conditions de la licence Apache.
Elasticsearch est basé sur Java : il est donc disponible sur de nombreuses plateformes et peut rechercher et indexer des fichiers de documents dans de nombreux formats différents. Les données stockées dans Elasticsearch ont la forme de documents JSON sans schéma, comme dans les bases de données NoSQL.
Histoire et présentation d'Elasticsearch
Composant essentiel de la suite Elastic d'outils open source, Elasticsearch est un moteur de recherche plein texte populaire, conçu et développé à l'origine par les ingénieurs de l'équipe Google Brain. Il est couramment employé dans de nombreuses applications commerciales, de Reddit à eBay en passant par YouTube. Dans de nombreuses entreprises, la recherche textuelle est devenue un aspect essentiel des processus commerciaux. À cet égard, Elasticsearch est semblable à d'autres moteurs de recherche.
Mais ce qui le distingue, c'est sa capacité à stocker et gérer des données distribuées. En d'autres termes, il est pensé pour traiter des données dont la taille varie constamment. Il permet donc de réaliser des requêtes très complexes, quelle que soit la taille du dataset. Toutefois, confier à un seul serveur de base de données les données de plusieurs utilisateurs peut avoir un impact significatif.
Qui utilise Elasticsearch ?
Des milliers de grandes entreprises utilisent Elasticsearch pour leurs données en ligne et hors ligne, y compris des géants de la tech comme Google, Oracle, Microsoft et bien d'autres noms connus.
Mais ce ne sont pas les seuls à rechercher un moyen simple d'indexer les données structurées. Il vous suffit simplement de savoir que cela existe et de comprendre comment cela fonctionne.
Mais à quoi sert Elasticsearch exactement ?
Elasticsearch peut être mis au service d'un large éventail de cas d'usage :
- Journalisation et analyse de log : l'écosystème de logiciels et de plateformes open source centrés sur Elasticsearch fait de ce moteur une solution de journalisation très simple à mettre en œuvre et à faire évoluer.
- Récupération et combinaison de données publiques : la flexibilité d'Elasticsearch permet d'accueillir de nombreuses sources de données différentes, mais aussi de les gérer et de les interroger.
- Recherche plein texte : Elasticsearch est orienté document. Il stocke et indexe des documents. L'indexation crée ou met à jour des documents. Une fois l'indexation terminée, ce sont des documents entiers, et non des données en colonnes, que vous pouvez rechercher, trier et filtrer.
- Données d'événement et métriques : Elasticsearch est connu pour sa capacité à gérer les données chronologiques telles que les métriques et les données d'événement. Quelle que soit la technologie utilisée, Elasticsearch possède certainement les composants requis pour extraire les données des applications courantes. Et si cela est exceptionnellement impossible, vous n'aurez aucun mal à ajouter cette capacité.
Architecture d'Elasticsearch : composants clés
Pour comprendre le fonctionnement d'Elasticsearch et dans quelles circonstances l'utiliser ou non, vous devez d'abord connaître l'infrastructure qui sous-tend son architecture. Elle est constituée de nombreux composants : cluster Elasticsearch, ports 9200 et 9300, partitions et répliques Elasticsearch, analyseurs, documents...
Cluster Elasticsearch
Un cluster Elasticsearch est un groupe de nœuds de calcul interconnectés qui stockent tous différents éléments de données du cluster.L'utilisateur peut ajuster le nombre de nœuds affectés à chaque cluster en modifiant le fichier « elasticsearch.yml » qui se trouve dans le dossier de configuration. Vous pouvez, en théorie, exécuter autant de clusters que vous le souhaitez. Mais la plupart des utilisateurs obtiennent les résultats souhaités avec un seul nœud.
Nœud Elasticsearch
Un nœud Elasticsearch est une ressource de calcul spécialement ajustée pour interroger, indexer et faire évoluer la base de données. Comme Elasticsearch est une base de données distribuée, il utilise une source unique de vérité : le nœud de données Elasticsearch qui renferme toutes vos données. Chaque nœud d'un cluster utilise un nom différent. Généralement, les nœuds Elasticsearch comptent entre 10 et 50 millions de documents dans chaque index.
Ports 9200 et 9300
Deux types de ports sont disponibles sur une partition Elasticsearch. Le premier des deux ports est toujours ouvert. Le deuxième ne s'ouvre qu'au moment de la création d'un index Elasticsearch et de l'initialisation d'un cluster. Le port 9200 est utilisé par défaut pour la partition principale, et le port 9300 est utilisé pour sa réplique.
Partitions Elasticsearch
Les partitions Elasticsearch sont de simples collections d'index Kibana regroupés au sein d'un seul index. Elasticsearch s'appuie sur deux types d'index : les documents Elasticsearch (doc) et les index Elasticsearch. Les documents sont reliés aux identifiants et aux index par un nom unique.
Répliques Elasticsearch
Une réplique est une copie de partition dont toutes les modifications sont reflétées dans une réplique secondaire, de façon entièrement transparente pour le client. La réplique principale est automatiquement mise à jour lorsque des données sont ajoutées, supprimées, actualisées ou modifiées.
Analyseurs Elasticsearch
Un analyseur est un composant de cluster Elasticsearch qui extrait les données de la base et les utilise pour réaliser des analyses. Il permet ainsi de filtrer et trier les données renvoyées à l'utilisateur.
Document Elasticsearch
Les documents Elasticsearch représentent le principal type d'index dans Elasticsearch. Chaque document créé a un ID dans le dataset, et une seule colonne par type de document. Pour donner un exemple simple, un document Elasticsearch peut avoir pour ID {doc id}. En règle générale, chaque document d'un cluster Elasticsearch possède un ID de partition, un nom et un tableau d'index, dont tous les champs possèdent leur propre identifiant à l'échelle de la partition.
Comment fonctionne Elasticsearch ?
Pour résumer, Elasticsearch prend les données et les publie sur chaque nœud du cluster. Puis il modifie les volumes de données en fonction de la quantité de données stockées. Elasticsearch fonctionne d'autant mieux qu'il peut stocker toutes vos données dans une même base, avec un conteneur d'index élastique.
Et comme Elasticsearch est un moteur de recherche RESTful orienté document, il s'accompagne d'un éventail d'outils pratiques. Il peut aussi traiter des datasets extrêmement volumineux. Ce logiciel peut également être utilisé en complément d'un autre. Par exemple, Elasticsearch + Spark.
Exemple de requête Elasticsearch
Imaginons que vous souhaitez rechercher le terme « Télécommunications ». La syntaxe de recherche suivante, très simple, suffit :
$"Télécommunications"
Comme Elasticsearch fonctionne à partir de documents, vous ne pouvez pas simplement interroger une liste de documents. Vous devez interroger un « type de document ». Nous allons employer l'expression « type:Télécommunications » pour recevoir uniquement des documents répondant aux critères de recherche.
Pour effectuer cette requête, nous passons le numéro d'identification du document comme paramètre de requête :
$"type:telecommunications"
Pour poursuivre le test, vous pouvez également créer un document d'exemple simple en exécutant la commande suivante :
create index:type:telecommunications create partition:type:telecommunications --data-urlencode /tasks --data-urlencode tasks/
Quel type de base de données utilise Elasticsearch ?
En combinant l'outil d'indexation Lucene à un modèle robuste de base de données distribuée, Elasticsearch parvient à fragmenter des datasets en composants plus petits, ou partitions, et à les distribuer sur différents nœuds.
Mais où les données sont-elles stockées ?
Les données stockées dans Elasticsearch peuvent être au format JSON ou CSV. Chaque index conserve son propre modèle de documents. L'index est entièrement répliqué à l'aide d'un bus de message qui communique avec la réplication secondaire. Les fichiers de log sont écrits sous la forme d'index Elasticsearch.
Ces documents sont stockés sous la forme d'un tableau de paires clés-valeurs dans une structure de données appelée « set memcached ». Un set memcached est une structure de données légère, évolutive et à faible mémoire pouvant détenir et traiter des données avec un grand volume de mémoire.
Le stockage Elasticsearch est optimisé pour les opérations d'acquisition, d'indexation et de recherche : les fichiers sont écrits sur le disque à intervalles réguliers. La seule façon de modifier la taille de l'index est d'ailleurs de supprimer le dernier document inséré et de le remplacer par un autre. Cette t âche s'appelle « migration de données » et désigne le processus consistant à créer un document à partir du nouvel index, à le mettre à jour puis à le réinsérer.
Qu'est-ce que l'agrégation Elasticsearch ?
L'agrégation Elasticsearch, qui consiste à affecter le même cluster à plusieurs points de terminaison, est une fonction puissante qui vous permet d'utiliser le même cluster Elasticsearch pour d'autres données et fonctionnalités, sans dégrader les performances de votre cluster de production.
Lorsque les clusters sont agrégés, chaque nœud reçoit un type de charge de travail. Ces charges de travail peuvent être de trois types :
- Non relationnelles
- Traitement des transactions en ligne (OLTP)
- Traitement analytique en ligne (OLAP)
Non relationnelles
Toutes les requêtes réseau générées par Elasticsearch sont générées par des requêtes exécutées sur le cluster Elasticsearch.
Quand un nœud Elasticsearch est inactif, le système d'exploitation se charge d'exécuter les requêtes sur un thread en arrière-plan et de renvoyer les résultats en continu. Quand un nœud Elasticsearch est en cours d'utilisation, il participe à un mécanisme de basculement, en cas de défaillance d'un nœud. En cas de surcharge du nœud, il transmet les requêtes à plusieurs autres nœuds jusqu'à ce que l'un d'entre eux soit libre.
Si le trafic réseau généré par Elasticsearch est principalement composé de données en lien avec des requêtes, Elasticsearch peut être mis au service de bien d'autres situations.
OLTP
Toutes les requêtes réseau générées par Elasticsearch sont toujours générées par des requêtes exécutées sur le cluster Elasticsearch.
Bien qu'il puisse s'agir d'un cluster Elasticsearch complet dédié à un grand système (ce qui représente un excellent point de départ), il est parfois intéressant de combiner Elasticsearch avec une source de données relationnelle. Dans ces situations, Elasticsearch s'exécute sur une source de données relationnelle secondaire à des fins de traitement. Il ne conserve la trace que d'une partie des requêtes qu'il exécute. Dans ce scénario, chaque nœud reçoit une seule source secondaire, les autres restent inactives.
OLAP
Il est important de souligner la distinction entre l'agrégation Elasticsearch et l'agrégation ordinaire : si les autres agrégations peuvent utiliser le même cluster Elasticsearch à différentes fins, l'agrégation Elasticsearch exploite une source de données secondaire pour stocker et traiter les données agrégées. L'agrégation Elasticsearch peut ainsi stocker davantage de données sans créer de requêtes supplémentaires sur un dataset principal (SQL ou NoSQL, par exemple).
Installation et utilisation d'Elasticsearch
L'installation est assez simple. Vous pouvez utiliser les référentiels par défaut d'Elasticsearch et définir un environnement par défaut.
Elasticsearch s'appuie sur un fichier de configuration nommé Kibana.yml. Vous pouvez modifier ce fichier selon vos besoins. Vous pouvez également faire appel à un fournisseur de plug-ins Elasticsearch populaire comme InfluxDB, Logstash, etc.
Étapes d'installation d'Elasticsearch :
- Installez la version de développement d'Elasticsearch ainsi que le serveur et toutes les dépendances
- Installez l'extension BOSH pour Java. L'extension BOSH permet d'écrire des modèles HTML qui vont rendre les données plus accessibles et lisibles par les humains, mais aussi de créer des outils de manipulation des données. L'extension BOSH nécessite un runtime Java. Vous pouvez utiliser les référentiels Java par défaut sur votre système d'exploitation pour l'installer.
- Lancement d'Elasticsearch
- Installez le plug-in Java pour BOSH
- C'est tout. Elasticsearch est installé sur votre machine, il est opérationnel et vous avez accès à toutes les données sous une forme facile à lire.
Visualisation des données avec Elasticsearch
Elasticsearch vous permet d'interroger et de filtrer toutes sortes de données à l'aide d'une API simple. Il s'agit d'une API RESTful : vous pouvez l'utiliser pour analyser les données et l'exploiter en production dans le cadre d'applications web. Actuellement, Elasticsearch propose la recherche en facettes, une fonctionnalité qui vous permet de calculer des agrégations de vos données. Voici quelques fonctions particulièrement utiles :
- Il fournit une solution de recherche évolutive.
- Les recherches sont effectuées en quasi temps réel.
- Il prend en charge les infrastructures multi-tenant.
- Il rationalise les processus de sauvegarde et garantit l'intégrité des données.
- Un index peut être récupéré en cas de défaillance d'un serveur.
- Il utilise le format de notation d'objet Javascript (JSON) et les interfaces de programmation (API) Java.
- Il indexe automatiquement les documents JSON.
- L'indexation utilise des identifiants uniques à l'échelle du type.
- Chaque index peut avoir ses propres paramètres.
- Les recherches peuvent être effectuées à l'aide de chaînes de requête Lucene.
Pourquoi utiliser Elasticsearch plutôt que SQL?
Le service Elasticsearch est le plus répandu, le plus puissant et le plus utile parmi les technologies de recherche – et de loin. C'est particulièrement sensible lorsqu'il s'agit de traiter de grandes quantités de données avec rapidité et efficacité : Elasticsearch fait alors bien mieux que la plupart des équivalents SQL.
Elasticsearch est spécialement conçu pour les grandes entreprises. Il fournit de puissantes fonctionnalités et des outils conviviaux aux organisations qui s'appuient sur l'analytique des données. Il les dote d'un moyen souple et pratique de stocker, interroger et analyser des lots de données, sans consommer une quantité excessive de ressources.
Comment déterminer la version d'Elasticsearch
Il existe deux façons rapides de connaître la version d'Elasticsearch que vous exécutez. La première consiste à lancer la console Elasticsearch et à vous connecter : vous pourrez voir la version de votre logiciel. La seconde consiste à consulter votre documentation Elasticsearch officielle.
Les trois principales alternatives à Elasticsearch sur le marché
Pour vous aider à faire un choix éclairé, nous vous présentons les trois principales alternatives à Elasticsearch qui méritent votre attention ;
AWS
Amazon Web Services (AWS) est devenu la principale plateforme de calcul pour les start-ups, la recherche de pointe et les grandes entreprises cherchant à renforcer leur infrastructure de calcul. Offrant des technologies qui permettent aux clients d'utiliser et de créer leurs propres serveurs virtuels, ainsi que le plus large éventail de services de cloud-computing de l'industrie, AWS domine la « guerre des clouds » qui oppose Azure de Microsoft et GCP de Google.
Solr
Apache Solr est un excellent moteur d'analytique et de recherche open source (sous licence BSD). Rédigé en Java, c'est l'un des moteurs de recherche open source les plus populaires. En effet, Solr est derrière la fonctionnalité de recherche de nombreux grands sites e-commerce internationaux et de plateformes de réseaux sociaux, dont Twitter, Yahoo, Amazon, eBay et eBay Enterprise.
Solr s'appuie sur une architecture distribuée pour produire des recherches rapides et propose une API de stockage unifié permettant d'intégrer le moteur en toute transparence à presque tous les mécanismes de stockage utilisés en entreprise.
ArangoDB
ArangoDB est une base de données distribuée, NoSQL et orientée document qui doit sa popularité à la puissance de son traitement analytique et à sa simplicité d'utilisation. À l'aide d'un langage proche de SQL appliqué au dépôt de paires clé-valeur d'ArangoDB, les utilisateurs peuvent créer des tables, des jointures et de requêtes comme ils le feraient dans des bases de données relationnelles.
ArangoDB est particulièrement performant quand il s'agit de tenir son code à jour, et les pages de documentation sont très bien conçues. Avec la multiplication des contributions et la maturité croissante du projet, tout porte à croire que ces pages resteront actualisées et faciles à parcourir. Précisons enfin qu'il est compatible avec tous les langages de programmation majeurs, dont Python et Javascript.
Les trois meilleurs outils d'Elasticsearch
Pour exploiter pleinement le potentiel de vos données, nous vous recommandons d'utiliser Elasticsearch en combinaison avec d'autres outils, à commencer par Hevo Data, Logstash et Apache Nifi.
Hevo Data
Hevo Data Elasticsearch est un moteur de recherche distribué gratuit et open source, conçu pour acquérir les données Elasticsearch, les convertir en requêtes et les exécuter sous la forme de logs d'événements sur les nœuds de clusters.Ce logiciel vous permet d'exécuter, en temps réel, des requêtes analytiques sur des données temps réel comme sur des sauvegardes de ces données.
Logstash
Pour dire les choses simplement, Logstash est un outil Elasticsearch qui permet de définir des règles afin de gérer les données dès qu'elles sont extraites par Elasticsearch. Grâce à ce traitement instantané, Logstash propose des outils d'analyse et de visualisation parfaits pour exploiter pleinement vos données.
Apache NiFi
Apache NiFi est un ensemble de bibliothèques qui établissent des « liens profonds » entre différentes sources de données, et notamment des API open source courantes comme l'API Core Location de Facebook, les API REST de Twitter et même l'API de fonction in-app de Yelp. Avec Apache NiFi, les utilisateurs peuvent lier leurs propres API et mettre toutes les informations d'un dataset à la disposition d'autres logiciels.
Est-ce qu'Elasticsearch est fait pour vous ?
Maintenant que vous en savez plus sur les capacités, l'infrastructure et l'architecture d'Elasticsearch, il ne vous reste plus qu'à déterminer si c'est l'outil idéal pour votre organisation.