Traitements Big Data avec Apache Spark

Page 1 sur 31Lecteur de document UniversityLib

Traitements Big Data avec Apache Spark

Big Data Processing Technology · notes

Voir tous les documents en intelligence artificielle et données

Traitements Big Data avec Apache Spark

1

Qu’est-ce que Spark ?

• Apache Spark est un framework de traitements Big Data open source

construit pour effectuer des analyses sophistiquées et conçu pour la

rapidité et la facilité d’utilisation. Il est passé open source sous forme de

projet Apache en 2010.

2

Qu’est-ce que Spark ?

• Spark présente plusieurs avantages:

– D’abord, Spark propose un framework complet et unifié pour répondre aux besoins

de traitements Big Data pour divers jeux de données, divers par leur nature (texte,

graphe, etc.) aussi bien que par le type de source (batch ou flux temps-réel).

– Ensuite, Spark permet à des applications sur clusters Hadoop d’être exécutées jusqu’à

100 fois plus vite en mémoire, 10 fois plus vite sur disque. Il permet d’écrire

rapidement des applications en Java, Scala ou Python et inclut un jeu de plus de 80

opérateurs haut-niveau.

– De plus, il est possible de l’utiliser de façon interactive pour requêter les données

depuis un shell.

3

Qu’est-ce que Spark ?

• De plus, il est possible de l’utiliser de façon interactive pour requêter les

données depuis un shell.

•

Enfin, en plus des opérations de Map et Reduce, Spark supporte les

requêtes SQL et le streaming de données et propose des fonctionnalités

de machine learning et de traitements orientés graphe. Les développeurs

peuvent utiliser ces possibilités en stand-alone ou en les combinant en

une chaîne de traitement complexe

4

Hadoop et Spark

• Hadoop est positionné en tant que technologie de traitement de données depuis 10 ans et a prouvé être la solution de choix pour le traitement de gros volumes de données.

•

MapReduce est une très bonne solution pour les traitements à passe unique mais n’est pas la plus efficace pour les cas d’utilisation nécessitant des traitements et algorithmes à plusieurs passes.

• Chaque étape d’un workflow de traitement étant constituée d’une phase de Map et d’une phase de Reduce, il est nécessaire d’exprimer tous les cas d’utilisation sous forme de patterns MapReduce pour tirer profit de cette solution.

•

Les données en sortie de l’exécution de chaque étape doivent être stockées sur système de fichier distribué avant que l’étape suivante commence. Cette approche a tendance à être peu rapide à cause de la réplication et du stockage sur disque.

5

Hadoop et Spark

• De plus, les solutions Hadoop s’appuient généralement sur des clusters, qui sont

difficiles à mettre en place et à administrer. Elles nécessitent aussi l’intégration

de plusieurs outils pour les différents cas d’utilisation big data (comme Mahout

pour le Machine Learning et Storm pour le traitement par flux).

•

Si vous souhaitez mettre en place quelque chose de plus complexe, vous devrez

enchaîner une série de jobs MapReduce et les exécuter séquentiellement,

chacun de ces jobs présentant une latence élevée et aucun ne pouvant

commencer avant que le précédent n’ait tout-à-fait terminé.

 Spark permet de développer des pipelines de traitement de données complexes,

à plusieurs étapes, en s’appuyant sur des graphes orientés acycliques (DAG).

6

Hadoop et Spark • Spark permet de partager les données en mémoire entre les graphes, de façon à ce que plusieurs jobs puissent travailler sur le même jeu de données. Spark s’exécute sur des infrastructures Hadoop Distributed File System (HDFS) et propose des fonctionnalités supplémentaires. Il est possible de déployer des applications Spark sur un cluster Hadoop v1 existant (avec SIMR – Spark-Inside-MapReduce), sur un cluster Hadoop v2 YARN.

•

• Plutôt que de voir en Spark un remplaçant d’Hadoop, il est plus correct

de le voir comme une alternative au MapReduce d’Hadoop.

Conclusion: • Spark n’a pas été prévu pour remplacer Hadoop mais pour mettre à disposition une solution complète et unifiée permettant de prendre en le cadre des charge différents cas d’utilisation et besoins dans traitements big data.

7

Les fonctionnalités de Spark

• Spark apporte des améliorations à MapReduce grâce à des étapes de

shuffle moins coûteuses. Avec le stockage en mémoire et un traitement

proche du temps-réel, la performance peut être plusieurs fois plus

rapide que d’autres technologies big data.

• Spark

supporte également

les évaluations paresseuses

("lazy

evaluation") des requêtes, ce qui aide à l’optimisation des étapes de

traitement.

•

Il propose une API de haut-niveau pour une meilleure productivité et un

modèle d’architecture cohérent pour les solutions big data.

8

Les fonctionnalités de Spark

• Spark maintient les résultats intermédiaires en mémoire plutôt que sur

Publicité

disque, ce qui est très utile en particulier lorsqu’il est nécessaire de

travailler à plusieurs reprises sur le même jeu de données. Le moteur

d’exécution est conçu pour travailler aussi bien en mémoire que sur

disque. Les opérateurs réalisent des opérations externes lorsque la donnée

ne tient pas en mémoire, ce qui permet de traiter des jeux de données

plus volumineux que la mémoire agrégée d’un cluster.

• Spark essaye de stocker le plus possible en mémoire avant de basculer sur

disque. Il est capable de travailler avec une partie des données en

mémoire, une autre sur disque.

9

Les fonctionnalités de Spark

Les autres fonctionnalités proposées par Spark comprennent : • Des fonctions autres que Map et Reduce • •

L’optimisation de graphes d’opérateurs arbitraires L’évaluation paresseuse des requêtes, ce qui aide à optimiser le workflow global de traitement

• Des APIs concises et cohérentes en Scala, Java et Python • Un shell interactif pour Scala et Python (non disponible encore en Java)

Spark est écrit en Scala et s’exécute sur la machine virtuelle Java (JVM). Les langages supportés actuellement pour le développement d’applications sont : Scala; Java; Python

10

L’écosystème de Spark À côté des API principales de Spark, l’écosystème contient des librairies additionnelles qui permettent de travailler dans le domaine des analyses big data et du machine learning. Parmi ces librairies, on trouve :

• Spark Streaming : Spark Streaming peut être utilisé pour traitement temps- réel des données en flux. Il s’appuie sur un mode de traitement en "micro batch" et utilise pour les données temps-réel DStream, c’est-à-dire une série de RDD (Resilient Distributed Dataset).

• Spark SQL : Spark SQL permet d’exposer les jeux de données Spark via API JDBC et d’exécuter des requêtes de type SQL en utilisant les outils BI et de visualisation traditionnels. Spark SQL permet d’extraire, transformer et charger des données sous différents formats (JSON, Parquet, base de données) et les exposer pour des requêtes ad-hoc.

11

L’écosystème de Spark

• Spark MLlib : MLlib est une librarie de machine learning qui contient tous

les algorithmes et utilitaires d’apprentissage classiques, comme la

classification, la régression, le clustering, le filtrage collaboratif, la réduction

de dimensions, en plus des primitives d’optimisation sous-jacentes.

• Spark GraphX : GraphX est la nouvelle API pour les traitements de graphes

et de parallélisation de graphes. GraphX étend les RDD de Spark en

introduisant le Resilient Distributed Dataset Graph, un multi-graphe orienté

avec des propriétés attachées aux nœuds et aux arrêtes.

12

L’architecture de Spark

L’architecture de Spark comprend les composants principaux suivants : •

Le stockage des données Spark utilise le système de fichiers HDFS pour le stockage des données. Il peut fonctionner avec n’importe quelle source de données compatible avec Hadoop, dont HDFS, HBase, Cassandra,…

•

Le Framework de gestion des ressources Spark peut être déployé comme un serveur autonome ou sur un framework de traitements distribués comme YARN.

•

Les RDD: Resilient Distributed Datasets

13

Les "Resilient Distributed Datasets"

•

Les Resilient Distributed Datasets, ou RDD, sont un concept au cœur du

framework Spark.

• Un RDD est comme une table dans une base de données. Celui-ci peut

porter tout type de données et est stocké par Spark sur différentes

partitions. Les RDD permettent de réarranger les calculs et d’optimiser le

traitement. Ils sont aussi tolérants aux pannes car un RDD sait comment

recréer et recalculer son ensemble de données.

•

Les RDD sont immutables: Pour obtenir une modification d’un RDD, il faut

y appliquer une transformation, qui retournera un nouveau RDD, l’original

restera inchangé.

14

Les "Resilient Distributed Datasets"

Les RDD supportent deux types d’opérations : •

Les transformations: ne retournent pas de valeur seule, elles retournent un nouveau RDD. Rien n’est évalué lorsque l’on fait appel à une fonction de transformation, cette fonction prend juste un RDD et retourne un nouveau RDD.

• Les fonctions de transformation sont par exemple map, filter, flatMap,

groupByKey, reduceByKey, aggregateByKey, pipe et coalesce.

•

Les actions: évaluent et retournent une nouvelle valeur. Au moment où une fonction d’action est appelée sur un objet RDD, toutes les requêtes de traitement des données sont calculées et le résultat est retourné.

• Les actions sont par exemple reduce, collect, count, first, take,

countByKey et foreach.

15

16

Exemples de transformations

17

Actions

18

19

Spark: Actions et transformations

• Pour une liste complète et des spécifications

détaillées de Spark, consulter: – https://spark.apache.org/docs/latest/api/scala/in

dex.html#org.apache.spark.sql.Dataset • Voici quelques exemples d’actions les plus

utilisées:

20

Publicité

21

Exemples de transformations

22

Activité

• Choisir une action et proposer un exemple. • Choisir une transformation et proposer un

exemple.

• Reference: http://b3d.bdpedia.fr/spark-

batch.html

23

Fonction Map

RDD [string]

Bonjour les Amis

Bonjour les Amis

Bonjour les Amis

…

Bonjour les Ennemis

Bonjour les Ennemis

Bonjour les Ennemis

RDD [string]

bonjour les amis

bonjour les amis

bonjour les amis

…

bonjour les ennemis

bonjour les ennemis

bonjour les ennemis

24

Fonction FlatMap

RDD [string]

bonjour les amis

bonjour les amis

bonjour les amis

…

bonjour les ennemis

bonjour les ennemis

bonjour les ennemis

RDD [string]

Bonjour

Les

amis

…

Bonjour

Les

ennemis

25

Fonction Map

RDD [string]

Bonjour

Les

amis

…

Bonjour

Les

ennemis

RDD [(string,int)]

(Bonjour,1)

(Les,1)

(amis,1)

…

(Bonjour,1)

(Les,1)

(ennemis,1)

26

Shuffle

RDD [(string,int)]

RDD [(string,iterator[int])]

RDD [(string,int)]

(Bonjour,1)

(Les,1)

(amis,1)

…

(Bonjour,1)

(Les,1)

(ennemis,1)

Publicité

(Bonjour,1, …,1)

(Les,1, …,1)

…

(amis,1)

…

.mapValues

(Bonjour,+2)

(Les,+2)

…

(amis,+1)

…

(ennemis,1)

(ennemis,+1)

GroupByKey

27

Les 2 premiers les plus fréquents

RDD [(string,int)]

(Bonjour,+2)

(Les,+2)

…

(amis,+1)

…

(ennemis,+1)

RDD [(int,string)]

(+2,bonjour)

(+2, les)

…

(+1, amis)

…

(+1,ennemis)

28

Les 2 premiers les plus fréquents

RDD [(int,string)]

RDD [(int,string)]

(+2,bonjour)

(+2, les)

…

(+1, amis)

…

(+2,bonjour)

(+2, les)

…

(+1, amis)

…

(+1,ennemis)

(+1,ennemis)

Array [(int,string)]

(+2,bonjour)

(+2, les)

29

Autre alternative avec Top(N)

RDD [(int,string)]

(+2,bonjour)

(+2, les)

…

(+2,bonjour)

LOCAL Top

(+2, les)

(+1, amis)

LOCAL Top

(+1, amis)

…

(+1,ennemis)

LOCAL Top

(+1,ennemis)

Reduction

(+2,bonjour)

(+2, les)

30

Le programme total

31