Vous êtes sur la page 1sur 54

Traitement Big Data

Avancé

Mohamed Najeh ISSAOUI


E-mail: mednajehissaoui@gmail.com

IT Business School
L’Ecosystème du Big Data

Mohamed Najeh ISSAOUI – IT Business School 2


L’Ecosystème du Big Data

Mohamed Najeh ISSAOUI – IT Business School 3


Apache Hadoop
▪ 2004: Conçu par Doug Cutting

▪ Framework Open Source

▪ Ecrit en Java

▪ Aide à créer des applications distribuées

▪ Résiste aux pannes

▪ 2009: fondation logicielle Apache


Mohamed Najeh ISSAOUI – IT Business School 4
Utilisation de Hadoop

▪ Stockage moins coûteux de très gros volumes données (Po)

▪ Les réseaux sociaux

▪ Les sites e-commerce comme

▪ Analyse de fichiers non structurés (log)

Mohamed Najeh ISSAOUI – IT Business School 5


HDFS

▪ Hadoop Distributed File System

▪ Système de stockage

▪ Possibilité de stocker des pétaoctets de données

▪ Traitement parallèle et distribué

▪ Tolérance aux erreurs avec la réplication des données

Mohamed Najeh ISSAOUI – IT Business School 6


Schéma de principe du HDFS

Mohamed Najeh ISSAOUI – IT Business School 7


MapReduce

▪ C’est un modèle de programmation

▪ Calculs parallèles et distribués sur des données très volumineuses

▪ Map réalise des opérations dédiées à chaque élément

▪ Reduce rassemble tous ces éléments et délivre le résultat sous forme

condensée

Mohamed Najeh ISSAOUI – IT Business School 8


MapReduce

Mohamed Najeh ISSAOUI – IT Business School 9


Distributions Hadoop

▪ Versions payantes

▪ Framework Hadoop personnalisé

▪ Consoles de gestion et administration, Documentation, Formation, …

Mohamed Najeh ISSAOUI – IT Business School 10


L’Ecosystème de Apache Hadoop

Mohamed Najeh ISSAOUI – IT Business School 11


Apache Spark
▪ 2009: Création par Matei Zaharia: Laboratoire AMPLab Universié de Berkeley
▪ 2010: Open Source sous licence BSD
▪ 2013: Licence Apache Software Foundation
▪ 2014: Spark a gagné le Daytona GraySort Contest

Mohamed Najeh ISSAOUI – IT Business School 12


Pourquoi utiliser Spark ?

▪ Trois fois plus rapide que Hadoop


▪ Utilise moins de ressources que Hadoop
▪ Plus de 400 contributeurs comme Intel, Facebook, IBM, Netflix, Yahoo,
Databricks, ….
▪ Fonctionne en mémoire (in-memory)
▪ Possibilité d’utiliser Spark avec Hadoop
▪ Résilient aux pannes

Mohamed Najeh ISSAOUI – IT Business School 13


Applications utilisant Spark ?

▪ Les ETL
▪ Analyse prédictive et Machine Learning
▪ Opérations d’accès aux données (SQL)
▪ Traitement et extraction de texte
▪ Traitement temps réel
▪ Applications graphiques

Mohamed Najeh ISSAOUI – IT Business School 14


API Spark
▪ Il est écrit en Scala
▪ Fonctionne sous JVM
▪ Fournit un support natif pour les APIs:
• Scala
• Python
• Java
• SQL
• R
Mohamed Najeh ISSAOUI – IT Business School 15
Ecosystème Spark

Mohamed Najeh ISSAOUI – IT Business School 16


Installation de Spark sous
Debian/Ubuntu

Mohamed Najeh ISSAOUI – IT Business School 17


Spark: Installation sous Ubuntu 20.04 LTS
▪ $ sudo apt update
▪ $ java –version
▪ $ sudo apt install default-jdk
▪ $ sudo apt install scala
▪ $ cd /opt
▪ $ sudo wget https://www.apache.org/dyn/closer.lua/spark/spark-
3.0.2/spark-3.0.2-bin-hadoop2.7.tgz
▪ $ sudo tar -xvzf spark-3.0.2-bin-hadoop2.7.tgz
Mohamed Najeh ISSAOUI – IT Business School 18
Spark: Installation sous Ubuntu 20.04 LTS
▪ /opt/spark/spark-3.0.2-bin-hadoop2.7 $ vi ~/.bashrc
export SPARK_HOME=/opt/spark/spark-3.0.2-bin-hadoop2.7
export PATH=$PATH:SPARK_HOME/bin:$SPARK_HOME/sbin
▪ /opt/spark/spark-3.0.2-bin-hadoop2.7/bin $ ./spark-shell

Mohamed Najeh ISSAOUI – IT Business School 19


Spark: Architecture Master/Worker

Mohamed Najeh ISSAOUI – IT Business School 20


Spark: Spark Driver

▪ Spark Context (SC)


▪ Planification d’applications
▪ Ordonnanceur d’application

Mohamed Najeh ISSAOUI – IT Business School 21


Spark: Spark Executors et Workers

▪ Réservation CPU
▪ Réservation mémoire
▪ Un exécuteur peut exécuter des milliers de tâches

Mohamed Najeh ISSAOUI – IT Business School 22


Spark: Architecture Master/Worker

Mohamed Najeh ISSAOUI – IT Business School 23


Spark: Programmation fonctionnelle

Mohamed Najeh ISSAOUI – IT Business School 24


Scala: Programmation fonctionnelle
▪ Exemple 1 d’une fonction:
def opp1(x : Int) : Int = { return –x;}
OU
def opp2(x : Int) : Int = –x
Exécution:
opp(5)
res0: Int = -5

▪ Exemple 2 d’une fonction:


def max(x : Int , y : Int) = if (x>y) x else y
Mohamed Najeh ISSAOUI – IT Business School 25
Scala: Programmation objet

Mohamed Najeh ISSAOUI – IT Business School 26


Spark: Langage Scala

▪ Hybride Objet / Fonctionnel


▪ Compilé en bytecode
▪ S’exécute dans la JVM
▪ Scalable
▪ Concis (Programmation fonctionnelle et typage)

Mohamed Najeh ISSAOUI – IT Business School 27


Spark: Langage Scala

▪ REPL: Read-Eval-Print Loop: Outil dans Sclala pour évaluer les expressions
Scala
▪ Ligne de commande permettant de faire du « pas à pas »
▪ Parfait pour l’apprentissage et la mise au point

Mohamed Najeh ISSAOUI – IT Business School 28


Scala: Les variables et les valeurs

▪ Une variable déclarée avec « val » ne peut pas être ré-affectée


val msg="message 1"
println(msg)
▪ Une variable déclarée avec « var » peut être ré-affectée

Mohamed Najeh ISSAOUI – IT Business School 29


Scala: Case class

▪ Des classes dont les objets sont immuables (Objet dont l’état ne peut pas être
modifié après sa création)
Scala> case class Book(isbn: String)
Scala> val livre = Book("123-455842611")
Scala> Println(livre)
▪ Pas de new
▪ Comparaison par valeur

Mohamed Najeh ISSAOUI – IT Business School 30


Scala: Case class

Scala> case class Message(sender: String, receiver: String, body: String)


Scala> val msg1 = Message("issaoui@gmail.com", "1DS@itbs.tn", "Bonjour")
Scala> println(msg1.body)

Scala> msg1.body = "Bonsoir" !!!!!!!!

Mohamed Najeh ISSAOUI – IT Business School 31


Scala: Comparaison entre classes

Scala> case class MessageComp(sender: String, receiver: String, body: String)


Scala> val msgcmp1 = MessageComp("issaoui@gmail.com", " 1DS@itbs.tn", "Bonjour")
Scala> val msgcmp2 = MessageComp("issaoui@gmail.com", " 1DS@itbs.tn", "Bonjour")
Scala> val msgcmp3 = MessageComp("issaoui@gmail.com", " 1DS@itbs.tn", "Bonsoir")
Scala> val comp1 = (msgcmp1 == msgcmp2)

Scala> val comp2 = (msgcmp1 == msgcmp3)

Mohamed Najeh ISSAOUI – IT Business School 32


Scala: Copiage des classes

Scala> val msgcopy1 = msgcmp1


Scala> println(msgcopy1)

Scala> val msgcopy2 = MessageComp.copy(sender = msgcmp1.receiver, receiver =


msgcmp2.sender, "Nouveau message")
Scala> println(msgcopy2)

Mohamed Najeh ISSAOUI – IT Business School 33


Scala: Types, Liste, Tableaux

Int
Double
String
Char
Byte
BigInt
…..

Mohamed Najeh ISSAOUI – IT Business School 34


Scala: Liste
▪ Les listes sont immutables (= on ne peut pas changer le contenu)
Scala> val list1 = List(1,2,3,4)
Scala> val list2 = List("Pomme", "Orange", "Poire")
Scala> println(list1(0))
Scala> println(list2(1))
Scala> list1.isEmpty
Scala> list2.head
Scala> list2.tail
Scala> "Pomme".toList
Scala> list1(2) = 100 !!!!!!!

Scala> val list3 = list1.map(_*2)


Mohamed Najeh ISSAOUI – IT Business School 35
Scala: Tableau
▪ Les éléments d’un tableau sont mutables
• Initialisation
• Modification
• Affichage
Scala> val tab1 = Array(1,2,3,4,5)
Scala> tab1.size
Scala> tab1(3)
Scala> tab1(2) = 100 !!!!
Mohamed Najeh ISSAOUI – IT Business School 36
Scala: Fonctions/Curring/Tuple
▪ Fonction:
• Mot-clé def (Déclaration d’une fonction)
• Le nom de la fonction
• Les paramètres de la fonction
• Le type de retour
• Le corps de la fonction entre accolade

Mohamed Najeh ISSAOUI – IT Business School 37


Scala: Fonctions/Curring/Tuple
Scala> def add(a:Int, b:Int)={a + b}
Scala> add(1,2)

Scala> def addCur1(a:Int)(b:Int) = {a +b}


Scala> addCur1(1)(2)

Scala > def addCur2(a: Int)={(b:Int)=> a + b}


Scala> addCur2(1)(2)
Mohamed Najeh ISSAOUI – IT Business School 38
Scala: Fonctions/Curring/Tuple
▪ Curring:
• Fonction où seuls quelques arguments sont spécifiés
• C’est la technique qui permet de transformer une fonction à plusieurs
arguments en une fonction à un seul argument
• Concepts courants dans les langages fonctionnels

Mohamed Najeh ISSAOUI – IT Business School 39


Scala: Fonctions/Curring/Tuple
▪ Tuple:
• Un nombre fixe d’éléments pouvant être manipulés d’un seul bloc
Scala> val t = (5,"bonjour" , 3.14 )
Scala> t._1
Scala> t._3
Scala> t."touche tabulation" pour afficher toutes les fonctions appliquées
Scala> val t2:( Int, String) = (1, "Hello")

Mohamed Najeh ISSAOUI – IT Business School 40


Scala: Pattern matching
▪ Pattern matching est comme le switch
▪ scala> def choix1 (c: Int): String = c match {
| case 1 => "Oui"
| case 0 => "Non"
| case _ => "Erreur"
| }
scala> choix1(0)

▪ scala> def choix2 (c: Int): String = c match {


| case 1 | 2 | 3 => "Oui"
| case 0 => "Non"
| case _ => "Erreur"
| }
scala> choix2(3)
Mohamed Najeh ISSAOUI – IT Business School 41
Scala: Pattern matching
▪ scala> def conversion(arg: String) = arg match {
| case "-h" | "--help" => "Afficher help"
| case " -v " | " --version " => "Afficher la version"
| case _ => "Erreur "
| }
scala> conversion( " -v ")

▪ scala> def f(x: Any): String = x match {


| case i:Int => " integer: " + i
| case _ :Double => " Double "
| case s:String => " Je veux dire " + s
| }
scala> f(3.14)
Mohamed Najeh ISSAOUI – IT Business School 42
Scala: Classes
▪ Les paramètres deviennent des membres publics à la classe
▪ scala.Seq est le super type avec les méthodes:
• filter
• fold
• map
• reduce
• …..

Mohamed Najeh ISSAOUI – IT Business School 43


Scala: Classes
▪ Scala> class Point(x:Int, y: Int) {
| var x1: Int = x
| var y1: Int = y
|
| def move(dx: Int, dy: Int) {
|
| x1 = x1 + dx
| y1 = y1 + dy
| println (" Point x1 location : " + x1);
| println (" Point y1 location : " + y1);
|}
|}
scala> val p = new Point(2,4)
scala> p.move(10,5)
Mohamed Najeh ISSAOUI – IT Business School 44
Scala: Collections

▪ Une syntaxe compacte pour les Tabeaux, List, Set, Map, etc
• Inférence de type
• Versions mutables et immutables
▪ Un grand choix de fonctions
▪ Consistant sur l’ensemble des collections foreach, map, filter, partition, find,
fold, reduce, etc …

Mohamed Najeh ISSAOUI – IT Business School 45


Scala: Collections
Scala> var fruit = Set("Pomme", "Orange", "Banane")
Scala> fruit.size
Scala> fruit."touche tabulation"
Scala> fruit("Pomme")
scala> fruit += "Poire"
scala> fruit
scala> fruit -= "Poire"

Mohamed Najeh ISSAOUI – IT Business School 46


Scala: Collections
scala> var s = Set(1, 2, 3)
scala> s = s + 4 équivaut à scala> s+=4
s: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 4)
scala> val s2 = collection.mutable.Set(1, 2, 3)
s2: scala.collection.mutable.Set[Int] = Set(1, 2, 3)

scala> val m = Map(1 -> "Tunis", 2 -> "Nabeul") équivaut à


scala> Map((1, "Tunis") , (2, "Nabeul"))
scala> m.toList
scala> res10.toMap
Mohamed Najeh ISSAOUI – IT Business School 47
Spark: RDD = Resilient Distributed Dataset

▪ C’est une structure de données centrale de Spark


▪ C’est du code fourni par le framework Spark
▪ Ce code appartient à la librairie du framework dans chacun des langages
suivants:

Mohamed Najeh ISSAOUI – IT Business School 48


Spark: RDD = Resilient Distributed Dataset

▪ Resilient: Tolérance aux pannes matérielles


▪ Distributed:
- Opérations effectuées d’une manière distribuée
- Données distribuées sur les nœuds du cluster
▪ Dataset: Opérations sur une abstraction de collection

Mohamed Najeh ISSAOUI – IT Business School 49


Les bases de la programmation des RDD:
Création d’un RDD

▪ SparkContext (sc) permet de créer les RDD:


• A partir d’une source de données (un fichier, une liste, ….)
• En parallélisant une collection
• En appliquant une méthode de transformation

Mohamed Najeh ISSAOUI – IT Business School 50


Les bases de la programmation des RDD:
Création d’un RDD

▪ Méthode textFile("/chemin_du_fichier")
// Local
val rdd1 = sc.textFile("/user/myfiles")
// Hadoop
val rdd2 = sc.textFile("hdfs://user/myfiles")

Mohamed Najeh ISSAOUI – IT Business School 51


Les bases de la programmation des RDD:
Création d’un RDD

▪ Méthode parallelize(liste)
// création d’une liste en scala
val liste = List("bleu", "rouge", "vert")
val rdd3 = sc.parallelize(liste)

Mohamed Najeh ISSAOUI – IT Business School 52


Les bases de la programmation des RDD:
Création d’un RDD
Exemple1:
scala> val rdd1 = sc.textFile("/opt/spark/test.txt")
scala> rdd1.count
Exemple2:
scala> val liste = List("rouge", "bleu", "jaune")
scala> val rdd2 = sc.parallelize(liste)
scala> rdd2.collect

Mohamed Najeh ISSAOUI – IT Business School 53


Les bases de la programmation des RDD:
Structure d’un RDD

▪ Immutable: Ne peut pas être modifiée


▪ Lazy (parésseux): Contient des références aux données
▪ Cacheable: un RDD peut être sauvegarder (on le fait en cas de le réutiliser
plus tard)

Mohamed Najeh ISSAOUI – IT Business School 54

Vous aimerez peut-être aussi