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

Traîtement distribué des données

Master 1 ISD

Données massives
Scala et Spark

Kim.Nguyen@lri.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 Data Set (ensemble de données 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

Transformations de RDD

Les fonctions de transformation sont les itérateurs Python, 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 (2.7) 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.

Pour les programmes Python, il suffit d'exécuter le script .py en ayant chargé les bons modules et en ayant configuré les chemins correctement.

Démo