Apache Spark a sa base architecturale dans le resilient distributed dataset (RDD), un multi-ensemble en lecture seule d’éléments de données répartis sur un cluster de machines, qui est maintenu de manière tolérante aux pannes. L’API Dataframe a été publiée en tant qu’abstraction au-dessus du RDD, suivie de L’API Dataset. Dans Spark 1.x, le RDD était l’interface de programmation d’application (API) principale, mais à partir de Spark 2.x l’utilisation de L’API Dataset est encouragée même si L’API RDD n’est pas obsolète. La technologie RDD est toujours à la base de L’API Dataset.,
Spark et ses DDR ont été développés en 2012 en réponse aux limitations du paradigme MapReduce cluster computing, qui force une structure de flux de données linéaire particulière sur les programmes distribués: les programmes MapReduce lisent les données d’entrée du disque, mappent une fonction à travers les données, réduisent les résultats de la carte et stockent les résultats Les RDD de Spark fonctionnent comme un ensemble de travail pour les programmes distribués qui offre une forme (délibérément) restreinte de mémoire partagée distribuée.,
Spark facilite la mise en œuvre à la fois d’algorithmes itératifs, qui visitent leur ensemble de données plusieurs fois dans une boucle, et d’analyse de données interactive / exploratoire, c’est-à-dire l’interrogation répétée de données de type base de données. La latence de telles applications peut être réduite de plusieurs ordres de grandeur par rapport à L’implémentation Apache Hadoop MapReduce.Parmi la classe des algorithmes itératifs figurent les algorithmes d’entraînement pour les systèmes d’apprentissage automatique, qui ont donné l’impulsion initiale au développement D’Apache Spark.
Apache Spark nécessite un gestionnaire de cluster et un système de stockage distribué., Pour la gestion de cluster, Spark prend en charge standalone (cluster Spark natif, où vous pouvez lancer un cluster manuellement ou utiliser les scripts de lancement fournis par le package d’installation. Il est également possible d’exécuter ces démons sur une seule machine pour tester), Hadoop YARN, Apache Mesos ou Kubernetes. Pour le stockage distribué, Spark peut s’interfacer avec une grande variété, y compris Alluxio, Hadoop Distributed File System (HDFS), MapR File System (MapR-FS), Cassandra, OpenStack Swift, Amazon S3, Kudu, Lustre file system, ou une solution personnalisée peut être implémentée., Spark prend également en charge un mode local pseudo-distribué, généralement utilisé uniquement à des fins de développement ou de test, où le stockage distribué n’est pas requis et le système de fichiers local peut être utilisé à la place; dans un tel scénario, Spark est exécuté sur une seule machine avec un exécuteur par cœur de processeur.
Spark CoreEdit
Spark Core est la base du projet global. Il fournit la répartition des tâches distribuées, la planification et les fonctionnalités d’e/s de base, exposées via une interface de programmation d’application (pour Java, Python, Scala, .,NET et R) centré sur L’abstraction RDD (L’API Java est disponible pour d’autres langages JVM, mais est également utilisable pour d’autres langages non-JVM pouvant se connecter à la JVM, tels que Julia). Cette interface reflète un modèle de programmation fonctionnel/d’ordre supérieur: un programme « pilote » appelle des opérations parallèles telles que map, filter ou reduce sur un RDD en passant une fonction à Spark, qui planifie ensuite l’exécution de la fonction en parallèle sur le cluster. Ces opérations, et d’autres telles que les jointures, prennent des RDDs en entrée et produisent de nouveaux RDDs., Les DDD sont immuables et leurs opérations sont paresseuses; la tolérance aux pannes est obtenue en gardant une trace de la « lignée » de chaque RDD (la séquence d’opérations qui l’a produit) afin qu’elle puisse être reconstruite en cas de perte de données. Les RDDs peuvent contenir n’importe quel type D’objets Python,. net, Java ou Scala.
outre le style fonctionnel de programmation orienté RDD, Spark fournit deux formes restreintes de variables partagées: les variables de diffusion référencent les données en lecture seule qui doivent être disponibles sur tous les nœuds, tandis que les accumulateurs peuvent être utilisés pour programmer des réductions dans un style impératif.,
un exemple typique de programmation fonctionnelle centrée sur RDD est le programme Scala suivant qui calcule les fréquences de tous les mots apparaissant dans un ensemble de fichiers texte et imprime les plus courants. Chaque map, flatMap (une variante de map) et reduceByKey prend une fonction anonyme qui effectue une opération simple sur un seul élément de données (ou une paire d’éléments), et applique son argument pour transformer un RDD en un nouveau RDD.,
Spark SQLEdit
Spark SQL est un composant au-dessus de Spark Core qui a introduit une abstraction de données appelée DataFrames, qui prend en charge les données structurées et semi-structurées. Spark SQL fournit un langage spécifique au domaine (DSL) pour manipuler les trames de données en Scala, Java, Python ou .NET. il fournit également un support en langage SQL, avec des interfaces de ligne de commande et un serveur ODBC/JDBC. Bien que les DataFrames n’aient pas la vérification de type à la compilation offerte par les RDDs, à partir de Spark 2.0, L’ensemble de données fortement typé est également entièrement pris en charge par Spark SQL.,
Spark StreamingEdit
Spark Streaming utilise la capacité de planification rapide de Spark Core pour effectuer des analyses de streaming. Il ingère les données en mini-lots et effectue des transformations RDD sur ces mini-lots de données. Cette conception permet d’utiliser le même ensemble de code d’application écrit pour l’analyse par lots dans l’analyse en continu, facilitant ainsi la mise en œuvre facile de l’architecture lambda. Cependant, cette commodité s’accompagne d’une pénalité de latence égale à la durée du mini-lot., D’autres moteurs de données de streaming qui traitent événement par événement plutôt que par mini-lots incluent Storm et le composant de streaming de Flink. Spark Streaming prend en charge les sockets Kafka, Flume, Twitter, ZeroMQ, Kinesis et TCP/IP.
Spark 2.x, une technologie distincte basée sur des ensembles de données, appelée Streaming structuré, dotée d’une interface de niveau supérieur est également fournie pour prendre en charge le streaming.
Spark peut être déployé dans un centre de données local traditionnel ainsi que dans le cloud.,
MLlib Machine Learning LibraryEdit
Spark MLlib est un framework d’apprentissage machine distribué au-dessus de Spark Core qui, en grande partie grâce à L’architecture Spark basée sur la mémoire distribuée, est jusqu’à neuf fois plus rapide que L’implémentation basée sur disque utilisée par Apache Mahout (selon les benchmarks effectués par les développeurs MLlib contre les implémentations als (alternating least squares), et avant que Mahout lui-même ne gagne une interface Spark), et évolue mieux que Vowpal Wabbit.,
graphxedit
GraphX est un framework de traitement graphique distribué au-dessus d’Apache Spark., Parce qu’il est basé sur des DDR, qui sont immuables, les graphiques sont immuables et donc GraphX ne convient pas aux graphiques qui doivent être mis à jour, encore moins de manière transactionnelle comme une base de données de graphiques. GraphX fournit deux API distinctes pour la mise en œuvre d’algorithmes massivement parallèles (tels que PageRank): une abstraction Pregel et une API plus générale de style MapReduce. Contrairement à son prédécesseur Bagel, qui a été formellement déconseillé dans Spark 1.6, GraphX a un support complet pour les graphiques de propriétés (graphiques où les propriétés peuvent être attachées aux arêtes et aux sommets).,
GraphX peut être considéré comme étant la version Spark en mémoire d’Apache Giraph, qui utilisait MapReduce basé sur disque Hadoop.
comme Apache Spark, GraphX a d’abord commencé comme un projet de recherche à AMPLab et Databricks de L’UC Berkeley, et a ensuite été donné à La Apache Software Foundation et au projet Spark.
Leave a Reply