3. ElasticSearch est un moteur de recherche Open Source(Apache 2). Il utilise
la librairie Apache Lucene et indexe les données sous forme de documents.
Sa mise en place est facile et rapide.
Il possède des avantages indéniables dont :
recherche en quasi temps réel
scalable, Haute disponibilité
automatiquement sauvegardé et répliqué
API REST
La Première version a été en 2010
La dernière version est 6.4.3 publié le 06 Novembre 2018
3
Introduction
4. Logstash est un pipeline de traitement de
données côté serveur qui ingère des données
provenant de plusieurs sources simultanément,
les transforme et les envoie ensuite dans une
"réserve" comme Elasticsearch, et
un ETL (initialement destiné aux logs).
Kibana permet aux utilisateurs de visualiser
des données avec des diagrammes et des
graphiques dans Elasticsearch.
4
Introduction
6. 6
Simplicité
Elasticsearch dissimule toute la complexité derrière l'API. Il est possible de l'utiliser
avec la configuration par défaut, ou de tout redéfinir manuellement : indexation,
réplication, clusterisation, tout se fait automatiquement.
Scalabilité,vitesse
D'un serveur local à une architecture distribuée gérant des péta octets de données
Des recherches quasiment en temps réel.
Modulaire
Un système de plugins permet d'ajouter des fonctionnalités à celles de base proposées par
Elasticsearch :
Sécurité, monitoring, alerting, reporting
Pourquoi Elasticsearch?
8. Document
Document : Un simple enregistrement dans un shard Elasticsearch.
Un document est structuré comme un objet JSON et doit appartenir à
un type (qui défini sa structure).
Exemple d'un document de type Ville
8
Les bases d’Elasticsearch
{
"title" : "Star Wars",
"directors" : ["George Lucas"],
"release_date" : "1977-05-25T00:00:00Z",
"rating" : 8.7,
"genres" : ["Action","Adventure","Fantasy","Sci-Fi"],
"plot" : "Luke Skywalker joins forces with a Jedi Knight, a cocky pilot, a wookiee and two droids to
save the universe from the Empire's world-destroying battle-station, while also attempting to
rescue Princess Leia from the evil Darth Vader.",
"actors" : ["Mark Hamill","Harrison Ford","Carrie Fisher"],
"year" : 1977
}
9. Noeud
Correspond à un processus d'Elasticsearch en cours d’exécution.
Cluster
Cluster : Il est composé d’un à plusieurs Node. Un noeud maître est
choisi, il sera remplacé en cas de défaillance.
Shard
Correspond à une instance Lucène.
9
Les bases d’Elasticsearch
10. Index
Un index est un espace logique de stockage de documents de même
type, découpé sur un à plusieurs Primary Shards.
Un index peut être répliqué sur zéro ou plusieurs Secondary Shards
Primary Shards
C'est une partition de l'index. Par défaut, l'index est découpé en 5
Shards Primary. Il n'est pas possible de changer le nombre de
Shards après sa création.
Secondary Shards
Il s'agit de de copies de Primary Shards. Il peut y en avoir zéro à
plusieurs par Primary Shard. Ce comportement est adopté à des fin de
performance et de sécurisation des données.
10
Les bases d’Elasticsearch
13. 13
Les bases d’Elasticsearch
SGBDR ELASTICSEARCH
Base de données Index ES
Tables de la BD Indices de l’index ES
Colonnes de la table Types de l’indice /propriétés des
documents JSON
Lignes de la table Documents de l’indice
{
"title" : "Star Wars",
"directors" : ["George Lucas"],
"release_date" : "1977-05-25T00:00:00Z",
"rating" : 8.7,
"genres" : ["Action","Adventure","Fantasy","Sci-Fi"],
}
15. On peut même ignorer complètement l'installation en utilisant le service hébergé
Elasticsearch sur Elastic Cloud. Vous pouvez essayer le service hébergé
gratuitement.
15
Elasticsearch requiert au moins Java 8,Autant
dire qu'avant d'installer Elasticsearch, vérifiez
d'abord votre version de Java
java -version
echo $JAVA_HOME
Téléchargez Elasticsearch 6.4.3 comme suit:
curl -L -O
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-
6.4.3.tar.gz
installation
16. 16
Puis extrayez-le comme suit: tar -xvf elasticsearch-6.4.3.tar.gz
Il va ensuite créer un tas de fichiers et
de dossiers dans notre répertoire
actuel. Nous allons ensuite dans le
répertoire bin comme suit
cd elasticsearch-6.4.3/bin
Et maintenant, nous sommes prêts à démarrer
notre nœud et notre cluster unique:
./elasticsearch
installation
18. ElasticSearch offre une API REST permettant d’effectuer tous
types d’opération. Il supporte les méthodes HTTP (GET, PUT,
POST et DELETE).
curl -XPUT 'http://localhost:9200/[index]/[type]/[id]/[action]'
Index : Nom de l’index
Type : Nom du type du document
Id : ID du document
Action : Action à effectuer
18
pratique
25. 25
Elasticsearch est ‘sans schéma’
Configurer seulement au besoin
Mapping explicite créé pour les types non configurés
Mapping dynamique: appliquer les mapping par défaut
pour les informations extraites du document JSON.
Le Mapping
26. 26
Mapping = Définir comment les documents sont
analysés et indexés:
Les types des champs/objets du document.
Les relations entre les documents.
La gestion des méta-données du document.
La définition de la pertinence par champ/document (boosting)
Le Mapping
27. Le Mapping pourquoi?
27
Adapter l’analyse de données à un domaine métier spécifique
Adapter la recherche aux utilisateurs :
terminologies spécifiques, multi-langages.
Certaines fonctionnalités l’exigent : Tri,Agrégation
28. Le Mapping dynamique
28
Les champs et les types de mappage n'ont pas besoin d'être
définis avant d'être utilisés.
Grâce au mappage dynamique, de nouveaux noms de champs
seront ajoutés automatiquement, simplement en indexant un
document.
Les règles de mappage dynamique peuvent être configurées
pour personnaliser le mappage utilisé pour les nouveaux
champs.
29. Le Mapping explicite
29
Vous en savez plus sur vos données qu'Elasticsearch ne peut
en deviner.
Ainsi, bien que le mappage dynamique puisse être utile pour
commencer, vous souhaiterez éventuellement spécifier vos
propres mappages explicites.
Vous pouvez créer des mappages de champs lorsque vous créez
un index et vous pouvez ajouter des champs à un index
existant avec l'API de mappage PUT.
32. Les principales différences
32
Hadoop offre beaucoup plus de flexibilité avec une variété d’outils, par rapport à ES.
Hadoop peut stocker une grande quantité de données, contrairement à ES.
Hadoop peut gérer des traitements étendus et une logique complexe, où ES ne peut
gérer qu'un traitement limité et un type de logique d'agrégation de base
33. comparaison
33
Base de comparaison Hadoop ElasticSearch
Principe fonctionnel Basé sur MapReduce Basé sur JSON et donc langage spécifique à un
domaine
complexité La manipulation de MapReduce est relativement
complexe
DSL basé sur JSON est assez facile à
comprendre et à mettre en œuvre
schéma Hadoop est basé sur la technologie NoSQL. Il
est donc facile de télécharger des données dans
n'importe quel format de valeur clé
recommande que les données soient au format
générique clé-valeur avant le téléchargement
Transfert groupé Le transfert groupé n'est pas un défi ici Les ES possèdent une certaine limite tampon,
Mais cela pourrait être prolongé après avoir
analysé l'échec survenu à quel point
35. Mise en place de Logstash
Logstash est un outil très puissant et polyvalent.
Décomposition du traitement en 3 zones :
Les entrées
Les filtres
Les sorties
Il est très polyvalent car il est capable de traiter tout ce qui
ressemble de près ou de loin à du texte.
Les plugins de sortie sont également très variés.
36
36. 36
Les entrées
# Input à partir d'un fichier
input {
file {
path => ...
}
}
# Input à partir d'une base de données MySQL
input {
jdbc {
jdbc_driver_library => "/path/to/mysql-connector-java-5.1.33-bin.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://host:port/database"
jdbc_user => "user"
jdbc_password => "password"
statement => "SELECT ..."
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
}
}
37. 37
Les filtres
c'est sa capacité à pouvoir filtrer tous les types possibles de données:
d'extraire les données
d'analyser les données
de nettoyer les donnée
filter {
# Lecture d'un fichier csv
csv {
columns => ["col1","col2","col3"]
separator => ";"
}
}
38. 38
Les sorties
# Sortie vers la console
output {
stdout { codec => rubydebug }
}
# Sotie vers une base elasticsearch
output {
elasticsearch {
host => "elasticsearch_host"
cluster => "elastic_cluster"
port => "9300"
index => "mon-index-%{+YYYY.MM.dd}"
protocol => "transport"
}
}
39. 39
Mise en place de kibana
Kibana est un outil graphique qui permet de requêter une base
elasticsearch et de réaliser des graphes à partir des données
qu'elle contient.
40. 40
Mise en place de kibana
Kibana se compose de plusieurs onglets :
Discover : Cet onglet permet de faire des recherches via la barre dédiée et de
voir les résultats bruts stockés dans la base elasticsearch
Visualize : Cet onglet permet de réaliser différents types de graphes à partir
d'une requête enregistrée ou à partir d'une nouvelle requête
Dashboard : Cet onglet permet de regrouper plusieurs graphes réalisés au
préalable dans l'onglet visualize sur une même page
Mais à la différence de MongoDB, le nombre de shards est est défini à la création de l'index et ne peut pas être modifié par la suite.
Tout à fait : en ajoutant un noeud, Elasticsearch va équilibrer les shards sur les différents noeuds. Pour assurer la disponibilité des données en cas de crash, il faut activer la réplication.
Les index sont divisés en shards et les shards ont des réplicas. Les shards et les réplicas sont distribués entre les différents nœuds d'un cluster Elasticsearch :
Le nombre de shards détermine la capacité du cluster à distribuer les opérations d'écriture entre les différents nœuds. S'ils ne sont pas assez nombreux, l'ajout de nœuds n'améliorera pas les performances d'écriture. Et s'ils sont trop nombreux, ils encombreront la RAM.
Le nombre de réplicas détermine la capacité du cluster à distribuer les opérations de lecture, ainsi que la tolérance aux pannes. S'ils sont trop nombreux, ils occuperont un espace disque trop important. Et si leur nombre est faible, cela aura une incidence sur les performances de lecture et la tolérance aux pannes.