1. Apache Spark: notions importantes
• RDD (Resilient Distributed Datasets): une table dans une base de données
– réarranger les calculs et d’optimiser le traitement (c-a-d: données sont divisés en partitions et peuvent être
stockés dans la mémoire sur les nœuds workers du cluster spark)
– tolérants aux pannes (c-a-d: un RDD sait comment recréer et recalculer son ensemble de données)
– Les RDD sont immutables (c-a-d: Pour obtenir une modification d’un RDD, il faut y appliquer une transformation, qui
retournera un nouveau RDD, l’original restera inchangé)
• DAG (Directed Acyclic Graph)
– Direct - La transformation est une action qui fait passer l'état de la partition de A à B.
– Acyclic -Transformation ne peut pas retourner à l'ancienne partition
– C’est une séquence de calculs effectuée sur des données où chaque nœud est une partition
RDD et un front est une transformation au-dessus des données.
• Les transformations
– prend juste un RDD et retourne un nouveau RDD
– par exemple map, filter, flatMap, groupByKey, reduceByKey, aggregateByKey, pipe (ex:
dataRDD.pipe("/home/hadoop/echo.sh")) et coalesce (= repartition())
• Les actions
– les actions évaluent et retournent une nouvelle valeur
– par exemple reduce, collect, count, first, take, countByKey et foreach
Page 1
3. Comment ça marche
1. Le code soumis contenant des transformations RDDs forme un
graphe acyclique direct (DAG) qui est ensuite divisé en étapes de
tâches par DAGScheduler.
2. Une étape est composée de tâches basées sur des partitions des
données d'entrée.
3. Les tâches sont planifiées par TaskScheduler afin de maximiser leur
traitement parallèle et optimisé.
4. Cluster Manager (en Standalone dans notre cas) envoient les tâches
planifiés aux workers pour les exécuter.
Page 3
4. Implémentation
• Composants
– Un master – Spark Driver
– Trois workers
– Un client to soumettre l’application en Python
• Bibliothèques
– Python 3.6
– Docker 17.03.1
– Pyspark 2.2.0
– Pybuilder 0.9
– Spark 2.2.0
– Java 8
• Déploiement
– Gestion de cluster en mode Standalone
– Docker composer
– Gitlab: https://gitlab.assurances.group.gca/AAD/demo-spark
Page 4
Keep in mind that repartitioning your data is a fairly expensive operation. Spark also has an optimized version of repartition() called coalesce() that allows avoiding data movement, but only if you are decreasing the number of RDD partitions.
Pipe operator in Spark, allows developer to process RDD data using external applications.