Vous êtes sur la page 1sur 15

Big Data Analytics 4ERP-BI

Big Data Analytics


Workshop ElasticSearch-Kibana

I- Objectifs
L’objectif de ce workshop consiste à permettre l’apprenant d’explorer les outils ElasticSearch
et Kibana pour stocker les données et visualiser les résultats d’analyses réalisés.

II- Présentation d’ElasticSearch


Elasticsearch est un outil de recherche distribué en temps réel et un outil d’analyse. Il est utilisé
pour l’analyse, la recherche full text et la recherche structurée. Elasticsearch permet un stockage
de document temps réel distribué où tous les champs sont indexés et consultables. Il s’agit d’un
moteur de recherche distribué permettant l’analyse en temps réel et capable de supporter la
monté en charge avec une centaine de serveurs et des peta-octets de données structurées et/ou
non structuré.

ElasticSearch est utilisé par :

- Wikipedia (http://fr.wikipedia.org)
- The Guardian (http://www.theguardian.com)
- StackOverflow (http://stackoverflow.com/)
- GitHub (https://github.com/)

Pour fonctionner, Elasticsearch a besoin de :

- Apache Lucene™, un moteur de recherche.


- Java donc la JVM est requise.

Comme démontré dans la figure ci-dessous, un cluster ElasticSearch est composé d’un à
plusieurs nœuds. Chaque nœud correspond à une instance ElasticSearch. Un nœud maitre est
choisi, il sera remplacé par un autre nœud en cas de défaillance.

Index : Il s’agit d’un espace logique de stockage de documents de même type, découpé sur un
à plusieurs PrimaryShards et peut être répliqué sur zéro ou plusieurs SecondaryShards.

Shard : Il correspond à une instance Lucène.

1
Ines Channoufi & Ines Slimene Esprit 2019-2020
Big Data Analytics 4ERP-BI

PrimaryShard : Par défaut, l’index est découpé en 5 ShardsPrimary. Il n’est pas possible de
changer le nombre de partitions après sa création.

SecondaryShard : Il s’agit des partitions répliquées. Il peut en avoir zéro à plusieurs par
PrimaryShard.

Figure 1- Architecture d'un cluster ElasticSearch

ElasticSearch se base sur un stockage de données orienté document. Un document correspond


à un simple enregistrement dans un shard ElasticSearch. Il est structuré comme un objet JSON
et doit appartenir à un type qui défini son mapping. Le contenu de chaque document est indexé.
Les types sont contenus dans un index. Le tableau ci-dessous illustre un comparison entre les
appellations dans ElsaticSearch et une base de données relationnelle.

BDR ElasticSearch

Base de données Index

2
Ines Channoufi & Ines Slimene Esprit 2019-2020
Big Data Analytics 4ERP-BI

Tables Types

Lignes Documents

Colonnes Champs

III- Premiers pas avec ElasticSearch

III.1- Installation et lancement

1. Décompresser les archives d’ElasticSearch et Kibana


2. Lancer ElasticSearch en ouvrant une fenêtre de commande dans le répertoire
ElasticSearch et exécuter : bin\elasticsearch
3. Vérifier en allant sur http://localhost:9200
Ou en exécutant l’instruction suivante en ligne de commande :
curl http://localhost:9200/?pretty

4. Lancer Kibana en ouvrant une fenêtre de commande dans le répertoire Kibana et


exécuter : bin\kibana
5. Vérifier en allant sur http://localhost:5601

III.2- Communication avec ElasticSearch

ElasticSearch offre une API REST (Application Programming Interface REpresentational


State Transfer) permettant d’effectuer tous les types d’opérations. Les API REST sont basées
3
Ines Channoufi & Ines Slimene Esprit 2019-2020
Big Data Analytics 4ERP-BI

sur HTTP. Un client lance une requête HTTP, et le serveur renvoie une réponse. Les réponses
du serveur pour les API REST peuvent être délivrées dans de multiples formats. Dans
ElasticSearch le format utilisé est JSON. Les méthodes supportées sont (GET, PUT, POST et
DELETE) :

 POST : création d’un document

 PUT : création ou modification d’un document

 GET : récupération d’un document

 HEAD : test si un document existe

 DELETE : suppression d’un document

Pour afficher le statut du cluster, on exécute l’instruction suivante :

Le champ « status » donne une indication globale sur le fonctionnement du cluster :

- Vert : Tous les Shards primaires et replicas sont actifs (Le cluster fonctionne et la
tolérance aux pannes est assurée).
- Jaune : Tous les Shards primaires sont actifs, mais les Shards replicas ne sont pas tous
actifs (Le cluster fonctionne mais si un nœud tombe la tolérance aux pannes n’est pas
assurée).
- Rouge : Des Shards primaires sont inactifs (Le cluster n’est pas fonctionnel).

4
Ines Channoufi & Ines Slimene Esprit 2019-2020
Big Data Analytics 4ERP-BI

III.3- Compréhension de l’environnement

L’indexation d’un nouveau document dans ElasticSerach, s’effectue en exécutant cette


instruction :

POST /biblio/livres/1
{
"title":"MapReduce",
"description":"Hadoop Data Processing in hadoop ",
"category":"Hadoop",
"tags":["HDFS", "MapReduce", "Hadoop","Cloudera", "big data"]
}
Pour récupérer un document :

GET /biblio/livres/1

Ajout d’un nouveau document

POST /biblio/livres/2
{
"title":"HDFS",
"description":" Data Storage in Hadoop ",
"category":"Hadoop",
"tags":["HDFS","Hadoop","Cloudera"]
}
Lister tous les documents d’un index

GET /biblio/livres/_search?pretty

Modification du document dont l’id est 2:

POST /biblio/livres/2/_update
{
"doc" : {
"tags":["big data","HDFS","Hadoop","Cloudera"]
}
}
Vérification :

GET /biblio/livres/2

Recherche d’un document qui contient le tag « big data »:

GET /biblio/livres/_search
{
"query":{
"match":{"tags":"big data"}
}

5
Ines Channoufi & Ines Slimene Esprit 2019-2020
Big Data Analytics 4ERP-BI

Pour afficher la liste des index crées, sous kibana on exécute l’instruction suivante :

GET /_cat/indices?v

Pour supprimer un index, on exécute l’instruction suivante :

delete /biblio/

IV- Scénario
Dans ce scénario, on se focalise sur les données dans les fichiers accounts.zip et logs.jsonl.gz.
IV.1- Chargement des données
Les données dans le fichier accounts.log sont organisées selon le schéma suivant :

{
"account_number": INT,
"balance": INT,
"firstname": "String",
"lastname": "String",
"age": INT,
"gender": "M or F",
"address": "String",
"employer": "String",
"email": "String",
"city": "String",
"state": "String"
}

1. Créer le type account de l’index bank avec la commande suivante :

curl -XPOST "localhost:9200/bank/account/_bulk?pretty" --data-binary @accounts.json

Cette commande permet d’importer les données du fichiers accounts.json dans le type account
de l’index bank. Pour vérifier, on doit lister le contenu de « account ».

6
Ines Channoufi & Ines Slimene Esprit 2019-2020
Big Data Analytics 4ERP-BI

GET /bank/account/_search?pretty

On peut effectuer une recherche sur ce type, par exemple, on affiche les comptes des utilisateurs
dont l’age est 33.

GET /bank/account/_search
{
"query":{
"match":{"age":"33"}
}
}

2. Le schéma des données logs comporte des dizaines de champs différents, mais les
principaux utilisés dans ce workshop sont les suivants:

{
"memory": INT,
"geo.coordinates": "geo_point"
"@timestamp": "date"
}
Avant de charger les données logs, nous devons configurer des mappings pour le champ
geo.coordinates. Le mapping divise les documents de l’index en groupes logiques et spécifie
les caractéristiques (les types) d’un champ. Dans notre cas, les données logs nécessitent un
mapping pour identifier les paires de latitude et de longitude comme des emplacements
géographiques en appliquant le type geo_point. Pour ce faire, on doit donc définir un mapping
pour les indexes logstash-2015.05.18, logstash-2015.05.19 et logstash-2015.05.20

PUT /logstash-2015.05.20?pretty

"mappings": {

"log": {

"properties": {

"geo": {

"properties": {"coordinates": { "type": "geo_point"} }

} } } }}

PUT /logstash-2015.05.19?pretty

7
Ines Channoufi & Ines Slimene Esprit 2019-2020
Big Data Analytics 4ERP-BI

"mappings": {

"log": {

"properties": {

"geo": {

"properties": {"coordinates": { "type": "geo_point"} }

} } } }}

PUT /logstash-2015.05.18?pretty

"mappings": {

"log": {

"properties": {

"geo": {

"properties": {"coordinates": { "type": "geo_point"} }

} } } }}

Une fois les mappings définis, on doit maintenant charger les données à partir du fichier
logs.json dans l’index logstash en utilisant l’API bulk.

curl -XPOST "localhost:9200/_bulk?pretty" --data-binary @logs.jsonl

3. Vérification des indexes crées

GET _cat/indices?v
GET /logstash-2015.05.20/_search?pretty
GET /logstash-2015.05.19/_search?pretty
GET /logstash-2015.05.18/_search?pretty

IV.2- Visualisation des données avec Kibana

1. Définition des Index Pattern


Pour visualiser les données dans Kibana, on doit créer des index Pattern pour les indexes crées
dans ElasticSearch. Ceux-ci permettent à Kibana de savoir quels sont les indexes ElasticSearch

8
Ines Channoufi & Ines Slimene Esprit 2019-2020
Big Data Analytics 4ERP-BI

qu’on souhaite explorer. Un index pattern peut correspondre au nom d'un seul index ou inclure
un caractère générique (*) pour faire correspondre plusieurs index.

Par exemple, pour notre cas, nous avons trois indexes crées ayant le format logstash-
YYYY.MMM.DD (logstash-2015.05.18, logstash-2015.05.19 et logstash-2015.05.20). Pour
explorer toutes les données logs de MAI 2018, on peut créer un seul index pattern logstash-*.

- Création de l’index pattern « logstash-* »

Dans Kibana, ouvrez l’onglet « Management », introduire par la suite le nom du pattern choisi
comme démontré dessous.

9
Ines Channoufi & Ines Slimene Esprit 2019-2020
Big Data Analytics 4ERP-BI

- Création de l’index pattern « bank »

Il faut décocher « time based events » lors de la création de cet index.

10
Ines Channoufi & Ines Slimene Esprit 2019-2020
Big Data Analytics 4ERP-BI

2. Exploration des données


Pour explorer les données, nous allons utiliser les fonctionnalités offertes par Kibana sous
l’onglet « Discover ».

Nous souhaitons par exemple, afficher les personnes dont le numéro de compte est inférieur à
100 et la balance est supérieure à 47500. Pour ce faire, on doit sélectionner l’index pattern
« bank » et introduire la requête suivante :

account_number:<100 AND balance:>47500

Par défaut, tous les champs sont affichés, pour choisir des champs spécifiques, on peut les
sélectionner parmi la liste « Available Fields » .
11
Ines Channoufi & Ines Slimene Esprit 2019-2020
Big Data Analytics 4ERP-BI

3. Visualisation des données

Notre objectif maintenant est de créer un pie chart qui permet de visualiser le nombre de clients
par balance. Pour ce faire, on doit aller à l’onglet « Visualize » et choisir Pie Chart.

- Choisir la source « bank »


- Cliquer sur « Split Slices » et dans Agregation, choisir « Range »
- Sélectionner « balance » pour le champ « Filed »
- Définir les intervalles suivants :

0 999
1000 2999
3000 6999
7000 14999
15000 30999
31000 50000

12
Ines Channoufi & Ines Slimene Esprit 2019-2020
Big Data Analytics 4ERP-BI

- Cliquer sur pour mettre à jour le chart.

- On enregistre cette visualisation en l’attribuant le nom « PieExample »

Maintenant on souhaite créer un map chart qui permet de visualiser les informations
géographiques dans les fichiers log. Pour ce faire on doit :

- Choisir la visualisation Tile map.

- Choisir l’index logstash-*

- Préciser l’intervalle de temp à visualiser (du 18 Mai 2015 au 20 Mai 2015.)

13
Ines Channoufi & Ines Slimene Esprit 2019-2020
Big Data Analytics 4ERP-BI

- Cliquer sur Geo Coordinates et choisir Geo.coordinates

- Cliquer sur pour mettre à jour le chart.

- On enregistre cette visualisation en l’attribuant le nom « MapExample »


4. Création d’un Dashboard

Nous allons créer un dashbord qui va contenir nos deux visualisations « PieExample » et
« MapExample ».

14
Ines Channoufi & Ines Slimene Esprit 2019-2020
Big Data Analytics 4ERP-BI

Dans le même dashboard, on vous demande de représenter le nombre de clients par age.

15
Ines Channoufi & Ines Slimene Esprit 2019-2020

Vous aimerez peut-être aussi