Hadoop, Spark & Big Data 2.0 Exploiter une grappe de calcul pour des problème des données massives
Qui suis-je? Félix-Antoine Fortin Génie info. (B. Ing, M. Sc, ~PhD) Passionné de Python, Data Analytics, Statistiques, et de CIP. 5 ans à l emploi de Calcul Québec* Supermarine Spitfire LF Mk.IXc MJ783 Musée Royale de l Armée et d Histoire Militaire, Bruxelles
Plan 1. Introduction à Apache Spark 2. Introduction à magpie 3. Démonstration interactive
Aller au delà de Map-Reduce? Les tâches complexes et interactives requièrent une chose que le MapReduce ne peut offrir: Primitive efficace pour le partage de données Algorithme itératif Analyse interactive Source: http://fr.slideshare.net/tsailiming/spark-meetup1-intro-to-spark
Aller au delà de MapReduce? Primitive Hadoop pour le partage de données: stockage! Sérialisation et I/O = jusqu à 90% du temps! Source: http://fr.slideshare.net/tsailiming/spark-meetup1-intro-to-spark
Principe derrière Spark chargement unique Mémoire distribuée Source: http://fr.slideshare.net/tsailiming/spark-meetup1-intro-to-spark
Resilient Distributed Dataset (RDD) Collection logique de données Stocké en mémoire Partitionné entre les noeuds Supporte la réplication (fault tolerance)
Spark RDD: création Un RDD peut être créé à partir de différente sources dont des fichiers textes et tout format d entrée Hadoop. textfile Les fichiers peuvent êtres compressés et multiples. On peut aussi distribuer des objets quelconques. parallelize
Spark RDD: transformations Un RDD est immuable. Ces fonctions permettent de créer un nouveau jeu de données de façon paresseuse (lazy evaluation). map filter flatmap sample distinct groupbykey reducebykey sortbykey join mappartitions union intersection cartesian cogroup
Spark RDD: actions Les actions produisent un résultat immédiat qui doit pouvoir être contenu dans la mémoire de l exécutant (driver) ou sur disque. reduce collect count first take takesample saveastextfile foreach
Spark RDD: persistence Un jeu de données n est pas nécessairement conservé en mémoire. cache persist Si on ne dispose pas d assez de mémoire pour stocker tout le jeu de données, la persistence peut être partielle.
Spark: écosystème API Python Java R Scala Librairies
Spark: compter des mots file = spark.textfile("file://...") counts = file.flatmap(lambda line: line.split(" "))\.map(lambda word: (word, 1))\.reduceByKey(lambda a, b: a + b) counts.saveastextfile("hdfs://...")
Spark: estimation de def sample(p): x, y = random(), random() return 1 if x*x + y*y < 1 else 0 count = spark.parallelize(range(0,num_samples)) \.map(sample) \.reduce(lambda a, b: a + b) print "Pi est approximativement = %f" % \ (4.0 * count / NUM_SAMPLES)
Spark: performance Terasort contest Hadoop Record Spark 100TB Spark 1PB Taille des données 100TB 100TB 1000 TB Durée du tri 72 minutes 23 minutes 234 minutes # Noeuds 2100 206 190 # Coeurs 50,400 6592 6080 Type instance Dédiée EC2 (i2.x8large) EC2 (i2.x8large) Jusqu à 100x plus rapide que Hadoop...
Comment lancer Spark à CQ? magpie
magpie Scripts de lancement de tâches de l écosytème big data d Apache
Qu est-ce que c est magpie? Ensemble de scripts de soumission de tâches d exécution des logiciels de l écosystème Big Data de Apache. Développé à Lawrence Livermore (LLNL) Compatible avec Moab/Torque (CQ) Simple à déployer (git clone) Open Source: https://github.com/chu11/magpie
Comment ça fonctionne? 1. Écrire un script de soumission de tâche à partir d un template et soumettre 2. Allocation des noeuds par Moab. 3. Génération des fichiers de configuration. 4. Lancement des démons sur tous les noeuds. 5. Interaction avec le cluster: a. Exécution d un script. b. Interaction directe en se connectant au noeud de tête.
Débuter avec magpie 1. git clone https://github.com/chu11/magpie 2. cd magpie; cd submission-scripts/script-msub-torque 3. vim magpie.msub-torque-spark 4. Ajuster les paramètres de la tâche (-N, -A, -l *)
Débuter avec magpie 5. Configurer MAGPIE_SCRIPTS_HOME pour pointer vers notre clone de magpie (~ ligne 72). 6. Décommenter et ajuster les variables (~ligne 150) export MAGPIE_STARTUP_TIME=5 export MAGPIE_SHUTDOWN_TIME=5 7. Remplacer la ligne export JAVA_HOME (~ligne 210) module load compilers/java 8. Configurer la version du logiciel (~ligne 225) export SPARK_VERSION="1.2.1[...]"
Débuter avec magpie 9. Configurer le chemin vers la racine de l application export SPARK_HOME=/software6/apps/spark/ 10. Configurer le type de tâche à exécuter (~ ligne 355) export SPARK_MODE="interactive" 11. Configurer les options de l application (ligne 360+) export SPARK_LOCAL_SCRATCH_DIR=${SCRATCH} # En mode non-interactif export SPARK_SCRIPT_PATH="${HOME}/script" 12. Sauvegarder le script
Lancer une tâche magpie 1. Soumettre la tâche: msub magpie.msub-torque-spark 2. Vérifier quels noeuds ont été alloués: checkjob <JOBID> 3. 1er noeud de la liste Allocated Nodes = master 4. Se connecter au master depuis une login via: a. ssh : ssh <hostname> b. http : firefox http://<hostname>:<port>/
Quelle est la suite? Déployer une version de magpie configurée sur mesure pour Colosse Chargement des modules (lmod) Permettre au master d exécuter des des démons d exécution (pull-request #7) Éliminer les constantes de temps (issue #9)
Démonstration interactive + magpie
Conclusion Spark offre une API simple permettant l interaction directe avec ses données permet de charger de gros jeux de données en fédérant la mémoire des noeuds de calcul. magpie pour lancer facilement Apache * Disponible et fonctionnel sur Colosse
Remerciements Albert Chu du groupe Chaos à LLNL pour le développement de magpie. magpiethat.com pour les divertissantes illustrations de pies.
Pour en apprendre plus École d'été CQ sur le CIP - HPC Data Analytics formation pratique avec Spark IPython Notebook R pour le CIP Quand : 25 au 29 mai 2015 Où : Centre d arts Orford
Questions? Êtes-vous prêt à l essayer?