Apache Spark defined
Apache Spark est un framework de traitement de données qui peut rapidement effectuer des tâches de traitement sur de très grands ensembles de données, et peut également distribuer des tâches de traitement de données sur plusieurs ordinateurs, seul ou en tandem avec d’autres outils Ces deux qualités sont essentielles pour les mondes du big data et de l’apprentissage automatique, qui nécessitent la mise en place d’une puissance de calcul massive pour croquer dans de grands magasins de données., Spark enlève également une partie du fardeau de programmation de ces tâches aux développeurs avec une API facile à utiliser qui résume une grande partie du travail grognon de l’informatique distribuée et du traitement des mégadonnées.
Depuis ses modestes débuts dans L’AMPLab à L’U. C. Berkeley en 2009, Apache Spark est devenu l’un des principaux frameworks de traitement distribué de big data dans le monde. Spark peut être déployé de différentes manières, fournit des liaisons natives pour les langages de programmation Java, Scala, Python et R, et prend en charge SQL, Le streaming de données, l’apprentissage automatique et le traitement de graphiques., Vous le trouverez utilisé par les banques, les sociétés de télécommunications, les sociétés de jeux, les gouvernements et tous les grands géants de la technologie tels Qu’Apple, Facebook, IBM et Microsoft.
architecture Apache Spark
à un niveau fondamental, une application Apache Spark se compose de deux composants principaux: un pilote, qui convertit le code de l’utilisateur en plusieurs tâches pouvant être réparties sur les nœuds de travail, et des exécuteurs, qui s’exécutent sur ces nœuds et exécutent les tâches qui leur sont assignées. Une certaine forme de gestionnaire de cluster est nécessaire pour assurer la médiation entre les deux.,
prêt à l’emploi, Spark peut s’exécuter en mode cluster autonome qui nécessite simplement le framework Apache Spark et une JVM sur chaque machine de votre cluster. Cependant, il est plus probable que vous souhaitiez tirer parti d’un système de gestion de ressources ou de clusters plus robuste pour vous permettre d’allouer des travailleurs à la demande. Dans l’entreprise, cela signifie normalement s’exécuter sur Hadoop YARN (c’est ainsi que les distributions Cloudera et Hortonworks exécutent des tâches Spark), mais Apache Spark peut également s’exécuter sur Apache Mesos, Kubernetes et Docker Swarm.,
Si vous recherchez une solution gérée, Apache Spark peut être trouvé dans le cadre D’Amazon EMR, Google Cloud Dataproc et Microsoft Azure HDInsight. Databricks, la société qui emploie les fondateurs D’Apache Spark, propose également la plate-forme D’analyse unifiée Databricks, qui est un service géré complet qui offre des clusters Apache Spark, la prise en charge du streaming, le développement intégré d’Ordinateurs portables basés sur le web et des performances d’E/S Cloud optimisées sur une distribution Apache Spark standard.
Apache Spark construit les commandes de traitement de données de l’utilisateur dans un graphe acyclique dirigé, ou Dag., Le DAG est la couche de planification D’Apache Spark; il détermine quelles tâches sont exécutées sur quels nœuds et dans quelle séquence.
Spark vs Hadoop: Pourquoi utiliser Apache Spark?
Il est intéressant de souligner que Apache Spark vs Apache Hadoop est un peu un mauvais nom. Vous trouverez Spark inclus dans la plupart des distributions Hadoop ces jours-ci. Mais en raison de deux grands avantages, Spark est devenu le cadre de choix lors du traitement des données volumineuses, dépassant L’ancien paradigme MapReduce qui a mis Hadoop en évidence.
Le premier avantage est la vitesse., Le moteur de données en mémoire de Spark signifie qu’il peut effectuer des tâches jusqu’à cent fois plus rapidement que MapReduce dans certaines situations, en particulier par rapport aux tâches à plusieurs étages qui nécessitent l’écriture de l’état sur le disque entre les étapes. En substance, MapReduce crée un graphique d’exécution en deux étapes consistant en mappage et réduction de données, alors que le DAG D’Apache Spark a plusieurs étapes qui peuvent être distribuées plus efficacement. Même les tâches Apache Spark où les données ne peuvent pas être complètement contenues dans la mémoire ont tendance à être environ 10 fois plus rapides que leur homologue MapReduce.,
le deuxième avantage est L’API Spark conviviale pour les développeurs. Aussi important que soit l’accélération de Spark, on pourrait soutenir que la convivialité de L’API Spark est encore plus importante.
Spark Core
en comparaison avec MapReduce et D’Autres composants Apache Hadoop, L’API Apache Spark est très conviviale pour les développeurs, cachant une grande partie de la complexité d’un moteur de traitement distribué derrière de simples appels de méthodes., L’exemple canonique de ceci est la façon dont près de 50 lignes de code MapReduce pour compter les mots dans un document peuvent être réduites à quelques lignes D’Apache Spark (ici montré dans Scala):
en fournissant des liaisons vers des langages populaires pour l’analyse de données comme Python et R, ainsi que Java et Scala, plus conviviaux pour les entreprises, Apache Spark permet à tout le monde, des développeurs d’applications aux data scientists, d’exploiter son évolutivité et sa vitesse de manière accessible.,
Spark RDD
Au cœur D’Apache Spark se trouve le concept de Resilient Distributed Dataset (RDD), une abstraction de programmation qui représente une collection immuable d’objets pouvant être répartis sur un cluster informatique. Les opérations sur les DDR peuvent également être réparties dans le cluster et exécutées dans un processus par lots parallèle, ce qui permet un traitement parallèle rapide et évolutif.
Les DDR peuvent être créés à partir de fichiers texte simples, de bases de données SQL, de magasins NoSQL (tels que Cassandra et MongoDB), de compartiments Amazon S3, et bien plus encore., Une grande partie de L’API Spark Core est construite sur ce concept RDD, permettant des fonctionnalités traditionnelles de mappage et de réduction, mais fournissant également une prise en charge intégrée pour joindre des ensembles de données, filtrer, échantillonner et agréger.
Spark s’exécute de manière distribuée en combinant un processus de cœur de pilote qui divise une application Spark en tâches et les répartit entre de nombreux processus exécuteurs qui effectuent le travail. Ces exécuteurs peuvent être mis à l’échelle selon les besoins de l’application.,
Spark SQL
initialement connu sous le nom de Shark, Spark SQL est devenu de plus en plus important pour le projet Apache Spark. C’est probablement l’interface la plus couramment utilisée par les développeurs d’aujourd’hui lors de la création d’applications. Spark SQL se concentre sur le traitement de données structurées, en utilisant une approche dataframe empruntée à R et Python (dans Pandas). Mais comme son nom l’indique, Spark SQL fournit également une interface conforme à SQL2003 pour interroger les données, apportant la puissance D’Apache Spark aux analystes ainsi qu’aux développeurs.,
en plus de la prise en charge standard de SQL, Spark SQL fournit une interface standard pour la lecture et l’écriture vers d’autres banques de données, notamment JSON, HDFS, Apache Hive, JDBC, Apache ORC et Apache Parquet, qui sont tous pris en charge immédiatement. D’autres magasins populaires—Apache Cassandra, MongoDB, Apache HBase et bien d’autres—peuvent être utilisés en tirant des connecteurs séparés de l’écosystème de paquets Spark.,
sélectionner certaines colonnes à partir d’une trame de données est aussi simple que cette ligne:
citiesDF.select("name”, "pop”)
En utilisant L’interface SQL, nous enregistrons la trame de données en tant que table temporaire, après quoi nous pouvons émettre des requêtes SQL:
citiesDF.createOrReplaceTempView("cities”)
spark.sql("SELECT name, pop FROM cities”)
dans les coulisses, Apache Spark appelé catalyseur qui examine les données et les requêtes afin de produire un plan de requête efficace pour la localité des données et le calcul qui effectuera les calculs requis à travers le cluster. Dans L’Apache Spark 2.,x era, l’interface Spark SQL des dataframes et des datasets (essentiellement une dataframe typée qui peut être vérifiée au moment de la compilation pour vérifier son exactitude et tirer parti d’autres optimisations de mémoire et de calcul au moment de l’exécution) est l’approche recommandée pour le développement. L’interface RDD est toujours disponible, mais recommandée uniquement si vos besoins ne peuvent pas être satisfaits dans le paradigme Spark SQL.
Spark 2.4 a introduit un ensemble de fonctions intégrées d’ordre supérieur pour manipuler directement des tableaux et d’autres types de données d’ordre supérieur.,
Spark MLlib
Apache Spark regroupe également des bibliothèques pour appliquer des techniques d’apprentissage automatique et d’analyse graphique aux données à grande échelle. Spark MLlib comprend un framework pour créer des pipelines d’apprentissage automatique, permettant une implémentation facile de l’extraction, des sélections et des transformations de fonctionnalités sur n’importe quel ensemble de données structuré. MLlib est livré avec des implémentations distribuées d’algorithmes de clustering et de classification tels que le clustering k-means et les forêts aléatoires qui peuvent être échangées facilement dans et hors des pipelines personnalisés., Les modèles peuvent être formés par des data scientists dans Apache Spark à L’aide de R ou Python, enregistrés à L’aide de MLlib, puis importés dans un pipeline basé sur Java ou Scala pour une utilisation en production.
notez que bien que Spark MLlib couvre l’apprentissage automatique de base, y compris la classification, la régression, le clustering et le filtrage, il n’inclut pas les fonctionnalités de modélisation et d’entraînement des réseaux neuronaux profonds (pour plus de détails, voir la revue Spark MLlib D’InfoWorld). Cependant, des Pipelines D’apprentissage en profondeur sont en cours.,
Spark GraphX
Spark GraphX est livré avec une sélection d’algorithmes distribués pour le traitement des structures de graphes, y compris une implémentation du PageRank de Google. Ces algorithmes utilisent L’approche RDD de Spark Core pour modéliser les données; le package GraphFrames vous permet d’effectuer des opérations de graphe sur des dataframes, notamment en tirant parti de L’optimiseur Catalyst pour les requêtes de graphe.
Spark Streaming
Spark Streaming a été un ajout précoce à Apache Spark qui l’a aidé à gagner du terrain dans des environnements nécessitant un traitement en temps réel ou presque., Auparavant, le traitement par lots et le traitement de flux dans le monde D’Apache Hadoop étaient des choses distinctes. Vous écririez du code MapReduce pour vos besoins de traitement par lots et utiliseriez quelque chose comme Apache Storm pour vos besoins de streaming en temps réel. Cela conduit évidemment à des bases de code disparates qui doivent être synchronisées pour le domaine d’application bien qu’elles soient basées sur des frameworks complètement différents, nécessitant des ressources différentes et impliquant des préoccupations opérationnelles différentes pour les exécuter.,
Spark Streaming a étendu le concept Apache Spark de traitement par lots en streaming en décomposant le flux en une série continue de microbatches, qui pouvaient ensuite être manipulées à l’aide de L’API Apache Spark. De cette façon, le code dans les opérations de batch et de streaming peut partager (principalement) le même code, s’exécutant sur le même framework, réduisant ainsi les frais généraux des développeurs et des opérateurs. Tout le monde gagne.,
une critique de L’approche de Streaming Spark est que le microbatching, dans les scénarios où une réponse à faible latence aux données entrantes est requise, peut ne pas être en mesure d’égaler les performances d’autres frameworks compatibles avec le streaming comme Apache Storm, Apache Flink et Apache Apex, qui utilisent tous une méthode de streaming
Streaming structuré
Streaming structuré (ajouté dans Spark 2.x) est à Spark Streaming ce que Spark SQL était aux API Spark Core: une API de niveau supérieur et une abstraction plus facile pour l’écriture d’applications., Dans le cas du streaming de Structure, L’API de niveau supérieur permet essentiellement aux développeurs de créer des trames de données et des ensembles de données en continu infinis. Il résout également certains points douloureux très réels avec lesquels les utilisateurs ont eu du mal dans le cadre précédent, en particulier en ce qui concerne le traitement des agrégations d’événements et de la livraison tardive des messages. Toutes les requêtes sur les flux structurés passent par L’optimiseur de requête Catalyst et peuvent même être exécutées de manière interactive, permettant aux utilisateurs d’effectuer des requêtes SQL sur des données de diffusion en direct.,
Le Streaming structuré reposait à l’origine sur le schéma de microbatching de Spark Streaming pour gérer les données de streaming. Mais dans Spark 2.3, L’équipe Apache Spark a ajouté un mode de traitement continu à faible latence au Streaming structuré, lui permettant de gérer les réponses avec des latences aussi basses que 1ms, ce qui est très impressionnant. À partir de Spark 2.4, le traitement continu est toujours considéré comme expérimental. Alors que le Streaming structuré est construit au-dessus du moteur Spark SQL, Le Streaming continu ne prend en charge qu’un ensemble restreint de requêtes.,
Le Streaming structuré est l’avenir des applications de streaming avec la plate-forme, donc si vous créez une nouvelle application de streaming, vous devez utiliser le Streaming structuré. Les API de Streaming Spark héritées continueront d’être prises en charge, mais le projet recommande le portage vers le Streaming structuré, car la nouvelle méthode rend l’écriture et la maintenance du code de streaming beaucoup plus supportables.
Pipelines D’apprentissage profond
Apache Spark prend en charge L’apprentissage profond via des Pipelines D’apprentissage profond., En utilisant la structure de pipeline existante de MLlib, vous pouvez appeler des bibliothèques d’apprentissage profond de niveau inférieur et construire des classificateurs en quelques lignes de code, ainsi que d’appliquer des graphiques TensorFlow personnalisés ou des modèles Keras aux données entrantes. Ces graphiques et modèles peuvent même être enregistrés en tant Qu’UDF Spark SQL personnalisé (fonctions définies par l’utilisateur) afin que les modèles d’apprentissage en profondeur puissent être appliqués aux données dans le cadre d’instructions SQL.
tutoriels Apache Spark
prêt à plonger et à apprendre Apache Spark?, Nous recommandons fortement Evan Heitman a Neandertal’s Guide to Apache Spark in Python, qui non seulement expose les bases du fonctionnement D’Apache Spark en termes relativement simples, mais vous guide également à travers le processus d’écriture d’une application Python simple qui utilise le framework. L’article est écrit du point de vue d’un scientifique des données, ce qui est logique car la science des données est un monde dans lequel le big data et l’apprentissage automatique sont de plus en plus critiques.,
Si vous recherchez des exemples Apache Spark pour vous donner une idée de ce que la plate-forme peut faire et comment elle le fait, consultez Spark By {Examples}. Il y a beaucoup d’exemples de code ici pour un certain nombre de tâches de base qui composent les blocs de construction de la programmation Spark, de sorte que vous pouvez voir les composants qui composent les tâches plus importantes pour lesquelles Apache Spark est fait.
Besoin d’aller plus loin? DZone a ce qu’il désigne modestement comme la Collection complète Apache Spark, qui se compose d’une multitude de tutoriels utiles sur de nombreux sujets Apache Spark. Heureux d’apprendre!