Vous êtes sur la page 1sur 46

1

Chp2 - Ingestion Big Data


INITIATION, CONCEPTS, ARCHITECTURES, ADMINISTRATION ET DÉVELOPPEMENT …
2
Introduction

 L’ingestion de Big Data est le processus


d’importation des données massives à partir
des sources variées vers un système de
stockage distribués (Hdfs, S3, GridFS …)
 l’ingestion de Big Data commence par
identifier et hiérarchiser les sources de
données, valider chaque source et acheminer
les éléments de données vers la bonne
destination
3
Paramètres d'ingestion Big Data

 L’ingestion big data dépond de quelques paramètres qui varient pour chaque source de
données :
 Vitesse de données
 Taille des données
 Variance des sources de données
 Fréquence des données (Batch, micro-batch, streaming …)
 Format de données (structuré, semi-structuré, non structuré)
4
Approches d’ingestion Big Data

 En général, il existe deux approches


d’ingestion Big Data :

 Ingestion Big Data en streaming

 Ingestion Big Data en batch


5
Apache Sqoop

 Apache Sqoop est un outil d’ingestion Big Data qui permet de transférer efficacement
des données en Batch à partir des différents SGBDR vers HDFS et vice-versa
 Apache Sqoop importe les données structurées externes dans HDFS ou autres systèmes
connexes comme Hive ou Hbase
6
Pourquoi utiliser Sqoop ?

 Beaucoup d’organisations ont besoin de transférer une grande quantité de données


entre HDFS et leurs bases de données relationnels, entrepôts de données et autres
sources de données existants
 Le transfert de données à l'aide des solutions hand-made (des scripts par exemple) est
difficile et prendre beaucoup de temps
7
Avantages de Sqoop

 Sqoop parallèle le transfert des données pour des performances rapides et une
utilisation optimale du système en utilisant le framework Map Reduce
 Sqoop Copie rapidement les données des systèmes externes vers HDFS
 Sqoop Rend l'analyse des données plus efficace et facile
8
Fonctionnement de Sqoop

 Sqoop Import
 L'outil d'importation importe des tables individuelles à partir des RDBMS vers HDFS
 Chaque ligne d'une table est traitée comme un enregistrement dans HDFS
 Tous les enregistrements sont stockés sous forme de données texte dans des fichiers texte ou
sous forme de données binaires dans des fichiers Avro, Orc ..
 Sqoop Export
 L'outil d'exportation exporte un ensemble de fichiers de HDFS vers un SGBDR
 Les fichiers donnés en entrée à Sqoop contiennent des enregistrements, qui sont appelés sous
forme de lignes dans le tableau. Ceux-ci sont lus et analysés dans un ensemble
d'enregistrements et délimités avec un délimiteur spécifié par l'utilisateur
9
Fonctionnement de Sqoop - Import

1. Le client Sqoop collecte les métadonnées (noms des colonnes et


leurs types de données) à partir de la table dans le SGBDR
2. Sqoop Génère une classe Java avec les noms des colonnes comme
champs et ces types de données correspondants
3. Sqoop lance des job Map Reduce sur le cluster Hadoop
4. Par défaut, Sqoop divise les lignes de la table à l'aide de la clé
primaire
5. Attribue chaque splits à une Map Task. Par défaut, 4 Map Tasks sont
créées
6. Chaque Map Task transfére le split vers HDFS et stocke par défaut
en tant que fichier CSV
10
Fonctionnement de Sqoop - Export

1. Sqoop transfère les données vers les SGBDR à l'aide de l'instructions


INSERT
2. Sqoop connecte au SGBDR pour obtenir les métadonnées de la
table cible
3. En utilisant les métadonnées, Sqoop génère et compile une classe
Java
4. La classe générée est utilisée dans le Map Task pour exporter les
données vers la table
5. La table doit exister avant l’exécution de la commande
d'exportation Sqoop
6. Par défaut, Sqoop lance 4 Map Task pour transférer les données de
HDFS vers SGBDR
11
Sqoop syntaxe - Import

 La syntaxe suivante est utilisée pour importer des données à partir des SGBDR vers HDFS
 $ sqoop-import (générique args) (import-args)
12
Sqoop syntaxe - Import

 La commande suivante est utilisée pour importer la table « emp » du serveur de base de
données MySQL vers HDFS
 $ sqoop import --connect jdbc:mysql://localhost/userdb --username root --table emp --m 1
 Sqoop importe les données dans le répertoire personnel dans Hdfs de l’utilisateur qui lancé la
commande
 On peut spécifier à sqoop le répertoire cible en ajoutant l’option --target-dir <répertoire
nouveau ou existant dans HDFS>
 La commande suivante est utilisée pour importer les données de la table « emp_add »
dans le répertoire « /queryresult »
 $ sqoop import --connect jdbc: mysql://localhost/userdb --username root --table emp_add --m 1
--target-dir /queryresult
13
Sqoop syntaxe - sous-ensemble de données

 On peut également importer un sous-ensemble d'une table à l'aide de l’option «where»


 Exemple pour récupérer les données à partir de la table « emp_add » seulement pour les
employées qui réside dans la ville de Tunis
 $ sqoop import --connect jdbc:mysql://localhost/userdb --username root --table emp_add --m
1 --where "city ='tunis'" --target-dir /wherequery
14
Sqoop syntaxe - Importation incrémentielle

 L'importation incrémentielle est une technique utilisé pour importer uniquement les
lignes nouvellement ajoutées dans une table
 Supposons que le dernier id importé dans Hdfs est 1205 et les données nouvellement ajoutées
dans la table « emp » soient les suivantes [1206, sami, manager, 20000, GR]. La commande
suivante est utilisée pour effectuer l'importation incrémentielle dans la table « emp »
 $ sqoop import --connect jdbc: mysql: // localhost / userdb --username root --table emp --m 1 --
incremental append --check-column id --last value 1205
15
Sqoop syntaxe - Importer toutes les tables

 La commande suivante est utilisée pour importer toutes les tables de la base de données
userdb
 $ sqoop import-all-tables --connect jdbc:mysql://localhost/userdb --username root
16
Sqoop syntaxe - Export

 La syntaxe suivante est utilisée pour exporter des données depuis HDFS vers RDBMS :
 $ sqoop-export (générique args) (export-args)
17
Sqoop syntaxe - Export

 Prenons un exemple des données des employés stockées dans un fichier, sous HDFS. Les
données des employés sont disponibles dans le fichier « emp_data » dans le répertoire «
/emp »
 La commande suivante est utilisée pour exporter les données qui se trouve dans le fichier
« emp_data » sous HDFS vers la table des employés dans la base de données « db » du serveur
de base de données Mysql
 $ sqoop export --connect jdbc:mysql://localhost/db --username root --table employee --export-
dir /emp/emp_data
18
Exercices

 Chercher et proposer d’autres outil d’ingestion Big Data similaire à apache Sqoop ?
19
Données de Log

 Le fichier log est un fichier qui répertorie les


événements/actions qui se produisent en temps
réel dans le système d’exploitation
 Exemple : les serveurs web répertorient chaque
demande adressée au serveur dans des fichiers log
 Lors de la récolte des données log, nous pouvons
obtenir des informations sur :
 Les performances de l'application en localisant
diverses pannes logicielles et/ou matérielles
 Des prédictions sur les pannes système ou réseaux
en futur
 Le comportement des utilisateurs afin d’obtenir les
meilleures informations commerciales (clickstream)
20
Données en streaming

 La plupart des Big Data sont produites par des sources de données en streaming par
exemple des fichier log telles que :
 Des log générées par des serveurs d'applications
 Des logs générées par des serveurs cloud et des serveurs d'entreprise
 Des données générées par des sites de réseaux sociaux (twitter, facebook ..)
 Des données générées par les capteurs des objets connectés
21
Ingestion big data en streaming

 Le principal défi de la gestion des fichiers log consiste a son déplacement vers HDFS
 La méthode traditionnelle de transfert des fichiers dans HDFS consiste à utiliser la commande put :
 $ Hadoop fs -put /chemin-du-fichier /chemin-requis-dans-HDFS-où-enregistrer-le-fichier
 Problème avec la commande put :
 On ne peut pas transférer qu'un seul fichier à la fois tandis que les générateurs de données génèrent des
données à un rythme beaucoup plus élevé
 Problème avec HDFS :
 Dans HDFS, le fichier existe en tant qu'entrée de répertoire et la longueur du fichier sera considérée comme
nulle jusqu'à sa fermeture. Par exemple, si une source écrit des données dans HDFS et que le réseau a été
interrompu au milieu de l'opération (sans fermer le fichier), les données écrites dans le fichier seront perdues
 Nous avons besoin d'un système fiable, configurable et maintenable pour transférer les données en
streaming dans HDFS
22
Exercices

 Citer quelques difficultés techniques l’ors d’ingestion/traitement des données Big Data
en streaming ?
 Chercher des outils ou solutions d’ingestions Big Data en streaming ?
23
Streaming data ingestion - Solutions disponibles

 Pour déplacer des données en streaming vers HDFS, nous avons à notre disposition des outils différents :
 Apache Flume
 Apache Flume est un logiciel de la fondation Apache destiné à la collecte et à l'analyse de fichiers de log.
L'outil est conçu pour fonctionner au sein d'une architecture informatique distribuée et ainsi supporter les
pics de charge

 Apache Nifi
 NiFi est un logiciel libre de gestion de flux de données. Il permet de gérer et d'automatiser des flux de
données entre plusieurs systèmes informatiques, à partir d'une interface web et dans un environnement
distribué

 Apache Kafka
 Apache Kafka est un projet open source d'agent de messages. Le projet vise à fournir un système unifié, en
temps réel à faible latence pour la manipulation de flux de données
24
Streaming data ingestion - Autres Solutions

 Stack Elk
 Le stack ELK comporte trois projets en open source : Elasticsearch, Logstash et Kibana
 Elasticsearch est un moteur de recherche et d'analyse de données. Logstash est un pipeline côté serveur, destiné a
Ingérer simultanément des données provenant de multitude de sources, puis les transformer et les envoyer vers un
système de stockage comme Elasticsearch.Kibana permet aux utilisateurs de visualiser les données stockées dans
Elasticsearch avec des tableaux et des chartes graphiques.

 Splunk
 Splunk collecte, indexe et met en corrélation des données en temps réel dans des archives recherchables, permettant
de générer des graphiques, des rapports, des alertes, des tableaux de bord et des infographies
25
Apache flume

 Apache Flume est un outil d'ingestion Big Data qui permet de collecter des grandes
quantités de données en streaming telles que les fichiers log à partir de diverses sources
 Flume est un outil distribué hautement fiable et configurable
26
Avantages de Flume

 Flume nous permet de stocker des données en streaming dans l'un des entrepôts de
données centralisés de l’écosystème Hadoop (Hbase, HDFS …)
 Flume est un outil hautement fiable
 Lorsque le taux de données entrantes dépasse le taux auquel les données peuvent être écrites
vers la destination, Flume agit comme médiateur entre les producteurs de données et les
entrepôts centralisés à fin de fournir un flux constant de données entre eux
 Flume est scalable horizontalement donc il assure la tolérance aux pannes, il est évolutif,
ainsi qu’il est gérable et personnalisable
 Flume prend en charge un large éventail de types de sources et de destinations
27
Apache Flume - Architecture

 L’architecture de Flume est composé des


générateurs de données, les agents,
collecteur de données et en fin la destination
 les générateurs de données (tels que
Facebook, Twitter, fichier log) génèrent des
données qui sont collectées par les agents
Flume (Agent1, Agent2 …)
 Un collecteur de données (Data Collector)
qui est également un agent collecte et
agrège puis transfère les données dans un
entrepôts de données (Centralized stores) de
l’écosystème Hadoop (Hdfs, Hbase …)
28
Apache Flume - Architecture

 Flume Event : désigne l'unité de données transportées à l'intérieur


de Flume. Il contient un Payload de tableau d'octets qui doit être
transportée de la source vers la destination accompagnée d’un en-
têtes facultatifs

 Flume Agent : Un agent est un processus démon indépendant


tourne sur un JVM (Java virtual machine). Il reçoit les événements
des clients ou d'autres agents et les transmet à sa prochaine
destination. Flume peut avoir plus d'un agent. Un agent Flume
contient trois composants principaux, à savoir la Source, le Chanel
et le Sink
29
Apache Flume - Architecture

 La source : c’est le composant qui reçoit les données à partir des générateurs de données et les transfère à
un ou plusieurs canaux sous la forme d'événements Flume. Apache Flume prend en charge plusieurs types
de sources et chaque source reçoit des événements d'un générateur de données spécifié
 Exemple : source Avro, source Thrift, source Twitter etc ...
 Channel : C’est une mémoire transitoire qui reçoit les événements à partir de la source et les met en
mémoire tampon jusqu'à ce qu'ils soient consommés par les récepteurs. Il agit comme un pont entre les
sources et les récepteurs. Les channels peuvent fonctionner avec n'importe quel nombre de sources et de
récepteurs
 Exemple : Channel JDBC, Channel système de fichiers, Channel mémoire, etc …
 Sink : C’est un récepteur qui stocke les données dans la cible souhaité comme Hbase, HDFS ou autre agent
Il consomme puis livre les données (événements) à partir des Channel vers la destination.
 Exemple : récepteur HDFS, récepteur Hbase …
30
Apache Nifi

 Apache NiFi est un outil d’ingestion Big Data qui permet de transférer et gérer des
données massives entre différentes sources et systèmes de destination
 Apache Nifi permet de gérer et d'automatiser des flux de données entre plusieurs
systèmes informatiques, à partir d'une interface web et dans un environnement distribué
31
Avantages de Nifi

 Apache NiFi fournit une interface utilisateur Web, qui offre une expérience transparente entre la
conception, le contrôle, les commentaires et la surveillance
 Apache NiFi est scalable horizontalement, il traite le même flux de données sur un ou plusieurs nœuds, ce
qui augmente les performances du traitement des données
 Nifi fournit un module de provenance des données qui permet de suivre et surveiller les données en
détaille du début jusqu’à la fin de flux
 NiFi prend en charge environ 188 Processors. Les développeurs peuvent créer leurs propres Processors
personnalisés en fonction de leurs besoins
 Nifi est hautement configurable. Cela aide les utilisateurs à fournir une livraison garantie avec une faible
latence, un débit élevé et une priorisation dynamique
 NiFi prend en charge les protocoles de sécurité tels que SSL, HTTPS, SSH et d'autres protocoles de cryptages
 Nifi prend également en charge la gestion des utilisateurs et rôles et peut également être configuré avec
LDAP pour l'autorisation
32
Apache NiFi - Process Groups

 Contient plusieurs Processors, il aide l’utilisateur à gérer et à maintenir les flux de


manière hiérarchique
 L’utilisateur peut gérer des différents Data Flow dans différents Process Groups
 Les Process groups peuvent être basés sur différents projets
33
Apache NiFi - Processors

 Les processors Apache NiFi sont les blocs de base pour créer un flux de données
 Chaque processor a des fonctionnalités différentes, ce qui contribue à la création d'un
nouveau Flowfile à la sortie
 Exemple : Processor GetFile Crée des FlowFiles à partir des fichiers dans un répertoire
 Le Data Flow illustré dans la figure ci-dessous extrait un fichier à partir d'un répertoire à
l'aide du processor GetFile et le stocke dans un autre répertoire à l'aide du processor
PutFile
34
Apache NiFi - Data Flow

 Un Data Flow Nifi est créé en connectant


différents processors pour transférer et modifier
les données si nécessaire d'une ou plusieurs
sources de données vers une autre source de
données de destination
 L’image illustre un Data Flow qui permet d’extraire
un fichier à partir d’un répertoire à l'aide du
processor GetFile puis faire une transformation à
travers le processor ReplaceText à fin de stocker la
résultat dans Hdfs à l'aide du processor PutHDFS
35
Apache NiFi - FlowFile

 Un FlowFile est une entité de traitement de base dans


Apache NiFi
 Il contient le contenu des données extraites des systèmes
source (Content) ainsi que les méta-données (Attributes),
qui sont utilisés par les processor NiFi dans le Data Flow
par exemple UIID, Filename, Filesize …
 L’image contient les différents attributs d’un FlowFile. On
peut visualiser le contenue de FlowFile en cliquant sur
view
36
Exercices

 Quelle sont les avantages de Apache Nifi par rapport aux autres ETL traditionnel comme
SSIS et Talend ?
37
Système de messaging

 Un système de messaging (Messaging System) est un système responsable du transfert


de données d'une application à une autre
 Les messages sont stockés de manière asynchrone dans des files d'attente entre les
applications clientes et le système de messaging
 Deux types de patrons de messaging existent: Les systèmes "point à point" et les
systèmes "publish-subscribe"
38
Systèmes de messaging Point à Point

 Dans un système point à point, le producteur publie les messages dans une file (queue)
et le consommateur lit les messages à partir de cette file
 Le producteur connaît la destination des messages et poste les messages directement
dans la file du consommateur
 Un ou plusieurs producteurs peuvent écrire les messages dans la file, mais un message
ne peut être consommé que par un seul consommateur à la fois
 Une fois le consommateur lit le message, ce dernier disparaît de la file
39
Systèmes de messaging Publish/Subscribe

 Dans un système publish-subscribe, les messages sont stockés dans un « Topic », il s'agit
plus d'envoyer des messages sur une file (queue) mais sur un Topic
 Les consommateurs peuvent souscrire à un ou plusieurs Topics et consommer tous les
messages de ce Topic
 Au contraire des systèmes de messaging point à point celui qui publie les messages et
ceux qui les reçoivent ne se connaissent pas
40
Apache Kafka

 Apache Kafka est un système de messaging distribué de type publish/subscribe


 Kafka vise à fournir un système unifié pour manipuler des flux de données en temps réel
et à faible latence
41
Utilisation de Kafka

 L’ingestion de données dans les entrepôts des


données tel que Hdfs, Hbase, NoSql ... (collecte
Big Data)
 L’ingestion de données dans les système de
traitement des données tel que Spark, Flink ..
(Complex Event Processing, stream processing …)
 Le monitoring
 Analyse et agrégation de logs
 Le tracking d’activité
 Les bus de messages
42
Avantages de Kafka

 Fiabilité: Kafka est distribué, partitionné, répliqué et tolérant aux pannes


 Scalablité: Le système de messagerie Kafka évolue facilement sans temps d'arrêt
 Durabilité: Kafka utilise un journal de validation distribué, ce qui signifie que les
messages persistent sur le disque aussi rapidement que possible, par conséquent, il est
durable
 Performances: Kafka a un débit élevé pour la publication et l'abonnement des messages.
Il maintient des performances stables, même de nombreux TB de messages sont stockés
 Kafka est très rapide et garantit aucun temps d'arrêt et aucune perte de données
43
Apache Kafka - Terminologies

 Producers: Les éditeurs de messages à un ou plusieurs topics Kafka. Ils


envoient des données en format message record aux brokers Kafka
 Consumers: reçoivent et lisent les données à partir des brokers. Ils
souscrivent à un ou plusieurs topics, et consomment les messages publiés en
extrayant les données à partir des brokers Brokers

 Brokers: Des systèmes responsables de maintenir les données publiées.


Chaque Broker peut avoir zéro ou plusieurs partitions par topic
 Kafka Cluster: Kafka est scalable horizontalement. Un système Kafka ayant
plus qu'un seul Broker est appelé cluster Kafka. L'ajout ou la suppression de
brokers est fait de manière transparente sans temps d'arrêt
 Topic: Un flux de messages appartenant à une catégorie particulière. Les
données sont stockées dans des topics
 Partitions: Chaque topic est divisé en partitions. Chaque partition contient
des messages dans une séquence ordonnée immuable appelé Offset
44
Apache Kafka - Fonctionnement

 Les Topics Kafka sont partitionnés, ce qui signifie


qu'un Topic est réparti sur un certain nombre de
partitions situés sur différents Brokers Kafka
 Les Offset est un identifiant séquentiel unique des
enregistrements d'une partition (a,b,c …)
 L’utilisation des Offsets est essentielle pour que un
consumer ne reçoit pas le même record deux fois
45
Apache Kafka - Fonctionnement

 Zookeeper permet de notifier les Producers et Consumer de la présence


de tout nouveau Broker, ou de l'échec d'un Broker dans le cluster
 Kafka assure la tolérance aux pannes par les réplicas. Les réplicas sont
des backups d'une partition. elles servent uniquement à prévenir la
perte de données
 Le facteur de réplication détermine combien de réplica doit être créer
pour chaque partition On définit le facteur de réplication l’ors de
création du Topic kafka est sera appliqué pour tous les partitions dans ce
Topic
 Le leader est un nœud élu par Zookeeper responsable de toutes les
lectures et les écritures d'une partition donnée
 Le Follower est un nœud Standby de Leader qui suit les instructions du
leader
 Chaque partition est écrit par le Producer dans un Broker Leader et sera
copié dans les autres Broker Follower
46
Exercices

 Donner des entreprises qui utilisent apache kafka dans leur architecture big data ?
 Dans quelle cas ces entreprises utilise apache kafka ?