∈"> ∉"> →"> ←"> ]> Données Massive, Spark

Traîtement distribué des données

Master 1 ISD

Données massives
Scala et Spark

kn@lmf.cnrs.fr

Spark

Appache Spark

Framework de calcul distribué

On s'intéresse ici à l'API « core » qui se place au même niveau que Map/Reduce. Les autres composants (SQL, Streaming, Machine Learning) sont construits au dessus.

Problèmes de Map/Reduce (1)

Problèmes d'interface avec le programmeur :

Problèmes de Map/Reduce (2)

Problèmes de performances :

Supposons une transformation qui s'exécute comme une opération M suivie de R1 et une autre qui s'éxécute comme M suivi de R2

Si on veut les 2 résultats, on va calculer 2 fois M

Si on ne veut pas calculer 2 fois M :

  1. On calcule M et on sauve le résultat m dans HDFS
  2. On charge m avec un Map identité et on envoie à R1
  3. On charge m avec un Map identité et on envoie à R2
  4. Si on veut combiner les résultats de R1 et R2 il faut refaire un map et un reduce…

Resilient Data Set

Un Resilient Distributed Data Set (ensemble de données distribué persistent) est une abstraction de haut niveau qui représente un calcul (et non pas son résultat) sur des données

Les RDDs sont à la base des transformations Spark

Le chargement des données crées un nouveau RDD (les données ne sont pas chargée, on crée juste une structure qui, quand elle sera évaluée chargera les données

On peut composer ds RDDs au moyen de transformations

On peut exécuter une action sur un RDD. Cela déclanche le calcul de toute la transformation pour obtenir un résultat final

Initialisation de Spark

Pour initialiser Spark, il faut (en toute généralité) commencer par initialiser Hadoop (si on souhaite que les données et les résultats soient stockés de façon distribuée sur Hadoop), puis démarer le service Spark. (cf la feuille de TP).

Une fois le service spark lancé, on peut écrire un fichier python comme celui ci:

from pyspark import SparkConf, SparkContext conf = SparkConf().setAppName("Exercice 1").setMaster("local") sc = SparkContext(conf=conf)

La variable sc est le contexte Spark et va nous permettre de créer des RDD

Création d'un RDD

On peut créer un RDD de plusieurs manière :

Des fonctions plus avancées permettent aussi de créer des RDD depuis des tables SQL, des fichiers binaires, …

Transformations de RDD

Les fonctions de transformation sont les itérateurs Scala, plus quelques nouveaux:

Action sur les RDDs

Les actions exécutent le RDD auquels elles sont appliquées pour renvoyer un résultat:

Spark en pratique

Spark est fourni avec des interpréteurs standards pour Scala, Python et R. Ce sont les interpréteurs normaux, dans lesquels sont préchargés les bibliothèques pour Spark.

Pour exécuter un programme Scala, on peut aussi l'exporter comme un jar et utiliser la commande spark-submit pour l'exécuter.

Démo