Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Pour surmonter les inconvénients d'Apache Hadoop, Spark est entré en scène.
Certains des inconvénients d'Hadoop qu'Apache Spark surmonte sont :
Hadoop n'utilisait que Java pour créer des applications. Parce qu'il utilise
Java, il y avait des problèmes de sécurité car Java est sujet à la
cybercriminalité.
Apache Hadoop n'était adapté qu'au traitement par lots. Ainsi, il ne prend pas
en charge le traitement de flux qui a été surmonté dans Spark.
Hadoop utilisait un traitement sur disque, ce qui ralentissait la récupération
des données. Spark surmonte cela par le calcul en mémoire.
N'a pas son système de gestion de fichiers. Ainsi, il doit s'intégrer à Hadoop
ou à d'autres plates-formes de données basées sur le cloud.
La capacité en mémoire peut devenir un goulot d'étranglement. Surtout
lorsqu'il s'agit d'un traitement rentable des Bigdata.
La consommation de mémoire est très élevée. Et les problèmes pour les
mêmes ne sont pas traités de manière conviviale. ré. Cela nécessite des
données volumineuses.
MLlib manque dans certains algorithmes disponibles, par exemple, la
distance Tanimoto.
Apache Spark prend en charge les langages suivants : Scala, Java, R, Python.
La vitesse de traitement des données augmente dans Apache Spark. Cela est dû à la prise en
charge du calcul en mémoire par le système. Ainsi, les performances du système augmentent
de 10x à 1000x. Apache Spark utilise différents langages pour le développement
d'applications distribuées. En plus du noyau Spark, diverses bibliothèques sont présentes. Ces
bibliothèques permettent une charge de travail qui utilise le streaming, SQL, graphique et
machine learning. Certaines de ces charges de travail sont également prises en charge par
Hadoop. Spark facilite le développement en les joignant dans la même application. Apache
Spark adopte le micro-lot. Qui est essentiellement utilisé pour gérer le modèle de données de
traitement en temps quasi réel.
Base de données: Dataset est une extension de l'API DataFrame qui fournit une interface de
programmation orientée objet et sécurisée. Base de données profite également de
Optimiseur de catalyseur de Spark en exposant des expressions et des champs de données à
un planificateur de requêtes.
La principale abstraction fournie par Apache Spark est Resilient Distributed Dataset. Les
RDD sont de nature tolérante aux pannes. Nous ne pouvons pas améliorer les modifications
apportées dans RDD. La création de RDD commence par le fichier dans un système de
fichiers comme le système de fichiers Hadoop, puis sa transformation. La variable partagée
est la deuxième abstraction fournie par Apache Spark. Nous pouvons l'utiliser dans des
opérations parallèles.
Apache Spark RDD prend en charge deux types d'opérations : les transformations et les
actions-
Collecte parallélisée –Dans les étapes initiales, le RDD est généralement créé par
collection parallélisée. Dans cette méthode, nous prenons la collection existante dans
le programme et la passons à la méthode parallelize() de SparkContext. La chose qui
doit être remarquée dans la collection parallélisée est le nombre de partitions dans
lesquelles l'ensemble de données est découpé. Pour chaque partition du cluster, Spark
exécutera une tâche. Spark a défini un certain nombre de partitions en fonction de
notre cluster. Mais le nombre de partitions peut également être défini manuellement.
Passez le numéro de partition comme deuxième paramètre pour la partition manuelle.
par exemple sc.parallelize(data, 20), ici nous avons manuellement donné un nombre
de partition comme 20.
Ensembles de données externes (référencement d'un ensemble de données) –Dans
Spark, il est possible de créer un ensemble de données distribué à partir de n'importe
quelle source de données prise en charge par Hadoop. Par exemple, le système de
fichiers local, HDFS, Cassandra, HBase, etc. Dans ce cas, les données sont chargées à
partir de l'ensemble de données externe. Pour créer un fichier texte RDD, nous
pouvons utiliserSparkContextméthode textFile. Il prend l'URL du fichier et le lit
comme une collection de lignes. L'URL peut être un chemin local sur la machine ou
un hdfs://, s3n://, etc.
Création d'un RDD à partir d'un RDD existant -La transformation convertit un
RDD en un autre RDD. En utilisant la transformation, nous pouvons créer un RDD à
partir d'un RDD existant. La transformation agit comme une fonction qui absorbe un
RDD et en produit un.
Q.15 Que sont les RDD appariés ?
RDD jumeléssont la paire clé-valeur contenant RDD. Une paire clé-valeur (KYP) contient
deux éléments de données liés. Ici Key est l'identifiant et Value sont les données
correspondant à la valeur de la clé.
Dans le calcul en mémoire, nous conservons les données dans la mémoire vive à la place de
certains lecteurs de disque lents. Le traitement des données est en parallèle. En utilisant cela,
nous pouvons également identifier le modèle, analyser les données volumineuses proposées
par Spark dans les capacités en mémoire. En conséquence, cela augmente la vitesse de
traitement car il récupère les données de la mémoire à la place du disque. De plus, le temps
d'exécution du processus diminue. Conserver les données en mémoire améliore les
performances de l'ordre de grandeur. La principale abstraction de Spark réside dans ses RDD.
De plus, nous pouvons mettre en cache RDD en utilisant la méthode cache() ou persist().
Dans la méthode cache(), tous les RDD sont en mémoire. La dissemblance entre cache() et
persist() est le niveau de stockage par défaut. Pour cache(), il s'agit de MEMORY_ONLY.
Dans persist(), il existe différents niveaux de stockage tels que :
MEMORY_ONLY,
MEMORY_AND_DISK,
MEMORY_ONLY_SER
MEMORY_AND_DISK_SER
DISK_ONLY
Q.17 Comment la tolérance aux pannes est-elle atteinte dans Apache Spark ?
Puisque tout RDD est un ensemble de données immuable. Chaque RDD garde une
trace de la lignée de l'opération déterministe que l'employé sur l'ensemble de données
d'entrée tolérant aux pannes pour le créer.
Si une partition d'un RDD est perdue en raison d'une défaillance du nœud de travail,
cette partition peut être recalculée à partir de l'ensemble de données tolérant aux
pannes d'origine à l'aide de la lignée des opérations.
En supposant que toutes les transformations RDD soient déterministes, les données du
RDD transformé final seront toujours les mêmes, quelles que soient les défaillances du
cluster Spark.
Pour atteindre la tolérance aux pannes pour tous les RDD générés, les données obtenues sont
répliquées parmi plusieurs exécuteurs Spark dans le nœud de travail du cluster. Il en résulte
deux types de données qui doivent être récupérées en cas de panne :
Données reçues et répliquées –En cela, les données se répliquent sur l'un des autres
nœuds. Ainsi, nous pouvons récupérer des données lorsqu'une panne survient.
Données reçues mais mises en mémoire tampon pour la réplication –les données
ne se répliquent pas. Ainsi, la seule façon de récupérer le défaut est de le récupérer à
nouveau à la source.
Une défaillance peut également se produire dans les nœuds de travail et de pilote.
Défaillance du nœud de travail –Le nœud qui exécute le code d'application sur le
cluster est le nœud de travail. Ce sont les nœuds esclaves. L'un des nœuds de travail
exécutant l'exécuteur peut échouer, entraînant ainsi une perte de données en mémoire.
Si des récepteurs s'exécutaient sur des nœuds défaillants, leurs données de tampon
disparaîtront.
Défaillance du nœud de pilote – Si le nœud du pilote exécutant l'application Spark
Streaming échoue, il y a la perte de Contenu Spark. Tous les exécuteurs avec leurs
données en mémoire disparaissent.
RDDse forment après chaque transformation. À haut niveau, lorsque nous appliquons une
action sur ces RDD, Spark crée un DAG. DAG est un graphe orienté fini sans cycles orientés.
Il y a tellement de sommets et d'arêtes, où chaque arête est dirigée d'un sommet à un autre. Il
contient une séquence de sommets telle que chaque arête est dirigée du plus tôt vers le plus
tard dans la séquence. C'est une généralisation stricte deCarteRéduiremaquette. DAG vous
permet d'entrer dans la scène et de vous développer en détail sur n'importe quelle scène.
Dans la vue d'étape, les détails de tous les RDD qui appartiennent à cette étape sont
développés.
Q.19 Qu'est-ce qu'un graphique de lignage ?
Graphique de lignagefait référence au graphique qui a tous les RDD parents d'un RDD. C'est
le résultat de toutes les transformations sur le RDD. Il crée un plan d'exécution logique.
Un plan d'exécution logique est un plan qui commence par le tout premier RDD. De plus, il
ne dépend d'aucun RDD. Il se termine ensuite au RDD qui produit le résultat d'une action qui
a été appelée à s'exécuter.
L'évaluation paresseuse connue sous le nom d'appel par besoin est une stratégie qui retarde
l'exécution jusqu'à ce que l'on requière une valeur. La transformation dans Spark est de nature
paresseuse. Spark les évalue paresseusement. Lorsque nous appelons une opération dans
RDD, elle ne s'exécute pas immédiatement ; Spark conserve le graphique de l'opération qu'il
demande. Nous pouvons exécuter l'opération à n'importe quelle instance en appelant l'action
sur les données. Les données ne se chargent pas tant que cela n'est pas nécessaire.
Le conducteur -La méthode main() du programme s'exécute dans le pilote. Le processus qui
exécute le code utilisateur qui crée les RDD effectue la transformation et l'action, et crée
également SparkContext est appelé plongeur. Lorsque Spark Shell est lancé, cela signifie que
nous avons créé un programme de pilote. L'application se termine, comme le pilote se
termine. Enfin, le programme pilote divise l'application Spark en tâches et les planifie pour
qu'elles s'exécutent sur l'exécuteur.
Gestionnaire de cluster – Spark dépend du gestionnaire de cluster pour lancer les exécuteurs.
Dans certains cas, même les pilotes sont lancés par le gestionnaire de cluster. C'est un
composant enfichable dans Spark. Sur le gestionnaire de cluster, le planificateur Spark
planifie les tâches et les actions au sein d'une application Spark à la manière FIFO.
Alternativement, la planification peut également être effectuée en mode Round Robin. Les
ressources utilisées par une application Spark peuvent également être ajustées
dynamiquement en fonction de la charge de travail. Ainsi, l'application peut libérer des
ressources inutilisées et les redemander en cas de demande. Ceci est disponible sur tous les
gros grainsgestionnaires de clusters, c'est-à-dire le mode autonome, le mode YARN et le
mode à grain grossier Mesos.
Les exécuteurs testamentaires - Chaque tâche du travail Spark s'exécute dans les exécuteurs
Spark. ainsi, les exécuteurs sont lancés une fois au début de l'application Spark, puis ils
s'exécutent pendant toute la durée de vie d'une application. Même après l'échec de l'exécuteur
Spark, l'application Spark peut continuer facilement.
Les exécuteurs ont deux rôles principaux :
Nous pouvons exécuter Spark sur Hadoop de trois manières : Standalone, YARN, SIMR
Autonome – En cela, nous pouvons soit diviser les ressources sur toutes les machines,
soit sous-ensemble de machines dans cluster Hadoop.
FIL –Nous pouvons exécuter Spark sur YARN sans aucun pré-requis. Ainsi, nous
pouvons intégrer Spark dans la pile Hadoop et profiter des fonctionnalités de Spark.
SIMR (Spark dans MapReduce) –Une autre façon de le faire consiste à lancer le
travail Spark dans Map reduce. Avec SIMR, nous pouvons utiliser Spark Shell en
quelques minutes après l'avoir téléchargé. Cela réduit les frais généraux de
déploiement et nous pouvons jouer avec Spark.
FILest devenu le sous-projet de Hadoop en 2012. Il est également connu sous le nom de
MapReduce 2.0. L'idée clé derrière YARN est de bifurquer les fonctionnalités du gestionnaire
de ressources et de la planification des tâches en différents démons. Le plan est d'avoir un
Global Resource Manager (RM) et un Application Master (AM) par application. Une
application est soit un DAG de graphiques, soit un travail individuel. Le cadre de calcul de
données est une combinaison de ResourceManager et de NodeManager.
Le gestionnaire de ressources gère les ressources parmi toutes les applications du système. Le
gestionnaire de ressources a planifié et le gestionnaire d'applications. Le planificateur alloue
des ressources aux différentes applications en cours d'exécution. Le Scheduler est pur
Scheduler s'il n'effectue aucune surveillance ou suivi de l'état de l'application. Le gestionnaire
d'applications gère les applications sur tous les nœuds. NodeManager contient
ApplicationMaster et conteneur. Un conteneur est un endroit où se déroule une unité de
travail. Chaque tâche de MapReduce s'exécute dans un conteneur. L'ApplicationMaster par
application est une bibliothèque spécifique au framework. Il négocie les ressources du
ResourceManager et continue avec le(s) NodeManager(s) pour exécuter et surveiller les
tâches. L'application ou le travail nécessite un ou plusieurs conteneurs. NodeManager
s'occupe des conteneurs, de l'utilisation des ressources (CPU, mémoire, disque,
Il existe deux modes de déploiement pour lancer l'application Spark sur YARN : le mode
cluster et le mode client.
En mode cluster, le pilote Spark s'exécute dans Application Master Process et est
géré par YARN sur le cluster.
En mode client,le pilote s'exécute dans le processus client. Le maître d'application
demande une ressource à YARN. Et il le fournit au programme pilote.
La partition fait référence à un bloc logique d'un grand ensemble de données distribué. Le
partitionnement logique des données et leur distribution sur le cluster assurent le parallélisme.
Il minimise également le trafic réseau pour l'envoi de données entre les exécuteurs. Il
détermine comment accéder à l'ensemble des ressources matérielles pendant l'exécution du
travail. RDD est automatiquement partitionné dans Spark. Nous pouvons modifier la taille et
le numéro de la partition.
Chaque fois que Spark exécute une fonction en parallèle sous la forme d'un ensemble de
tâches sur différents nœuds, chaque variable utilisée dans la fonction est distribuée à chaque
tâche. Parfois, il est nécessaire de partager les variables entre les tâches ou entre la tâche et le
programme pilote.
Apache Spark prend en charge deux types de variables partagées, à savoir la variable de
diffusion et l'accumulateur. À l'aide de variables de diffusion, nous mettons en cache une
valeur en mémoire sur tous les nœuds pendant que nous ajoutons des accumulateurs, tels que
des compteurs et des sommes.
L'accumulateur est le type de variable partagée qui n'est ajoutée que par des opérations
associatives et commutatives. En utilisant l'accumulateur, nous pouvons mettre à jour la
valeur de la variable lors de l'exécution. On peut aussi implémenter des compteurs (comme
dans MapReduce) ou des sommes à l'aide d'un accumulateur. Les utilisateurs peuvent créer un
accumulateur nommé ou non nommé. Nous pouvons créer un accumulateur numérique en
appelant SparkContext.longAccumulator() ou SparkContext.doubleAccumulator() pour Long
ou Double.
a) LIRE
RDD :Dans RDD, l'opération de lecture est à grain grossier ou à grain fin. En gros,
nous pouvons transformer l'ensemble de données entier mais pas un élément
individuel. Alors qu'en granulation fine, nous effectuons la transformation d'un
élément individuel sur un ensemble de données.
Mémoire partagée distribuée : L'opération de lecture dans la mémoire partagée
distribuée est affinée.
b) Écris :
c) Cohérence :
RDD :La cohérence de RDD est triviale, ce qui signifie qu'il est de nature immuable.
Toute modification apportée à un RDD ne peut pas être annulée, elle est permanente.
Le niveau de cohérence est donc élevé.
Mémoire partagée distribuée :Le système garantit que si le programmeur suit les
règles, la mémoire sera cohérente. Il garantit également que les résultats des
opérations de mémoire seront prévisibles.
d) Mécanisme de dépannage :
e) Atténuation des retardataires : Les retardataires, en général, sont les tâches qui prennent
plus de temps à accomplir que leurs pairs.
RDD : dans RDD, il est possible d'atténuer les retardataires en utilisant la tâche de
sauvegarde.
Mémoire partagée distribuée : Il est assez difficile de parvenir à une atténuation des
retardataires.
RDD : S'il n'y a pas assez d'espace pour stocker les RDD dans la RAM, les RDD sont
déplacés vers le disque.
Mémoire partagée distribuée : Dans ce type de système, les performances diminuent
si la RAM manque de stockage.
Q.35 Quels sont les défauts courants du développeur lors de l'utilisation d'Apache
Spark ?
Q.36 Lequel des deux est préférable pour le projet : Hadoop MapReduce ou Apache
Spark ?
La réponse à cette question dépend du type de projet que l'on a. Comme nous le savons tous,
Spark utilise une grande quantité de RAM et a également besoin d'une machine dédiée pour
fournir un résultat efficace. La réponse dépend donc du projet et du budget de l'organisation.
Les cas d'utilisation les plus populaires d'Apache Spark sont : 1. Streaming2. Apprentissage
automatique3. Analyse interactive4. brouillard informatique5. Utiliser Spark dans le monde
réel
La valeur par défaut est de 1 Go. Il fait référence à la quantité de mémoire qui sera utilisée par
processus d'exécution. Nous avons classé les questions et réponses d'entretien Spark ci-dessus
pour les débutants et les plus expérimentés.
Il a une bibliothèque TreeNode pour transformer l'arbre. Ils sont exprimés sous forme
de classes de cas Scala.
Une représentation de plan logique pour l'opérateur relationnel.
Bibliothèque d'expressions.
DStreamest l'abstraction de haut niveau fournie par Spark Streaming. Il représente un flux
continu de données. Ainsi, DStream est en interne une séquence de RDD. Il existe deux
manières de créer DStream :
en utilisant des données provenant de différentes sources telles que Kafka, Flume et
Kinesis.
en appliquant des opérations de haut niveau sur d'autres DStreams.
DStream est une abstraction de base de Spark Streaming. C'est une séquence continue de
RDD qui représente un flux continu de données. Comme RDD, DStream prend également en
charge de nombreuses transformations disponibles sur Spark RDD normal. Par exemple,
map(func), flatMap(func), filter(func) etc.
Oui, Apache Spark fournit des points de contrôle. Apache prend en charge deux types de
points de contrôle :
Point de contrôle fiable :Il fait référence à ce point de contrôle dans lequel le RDD
réel est enregistré dans le système de fichiers distribué fiable, par exemple HDFS.
Pour définir le répertoire du point de contrôle, appelez :
SparkContext.setCheckpointDir(répertoire : String). Lors de l'exécution sur le cluster,
le répertoire doit être un chemin HDFS car le pilote essaie de récupérer le RDD avec
point de contrôle à partir d'un fichier local. Alors que les fichiers de point de contrôle
sont en fait sur les machines de l'exécuteur.
Point de contrôle local :Dans ce point de contrôle, dans Spark Streaming ou GraphX,
nous tronquons le graphe de lignage RDD dans Spark. Dans ce cas, le RDD est
conservé dans le stockage local dans l'exécuteur.
Le journal d'écriture anticipée est une technique qui assure la durabilité d'un système de base
de données. Cela fonctionne de la manière dont toutes les opérations qui s'appliquent aux
données, nous les écrivons dans un journal d'écriture anticipée. Les bûches sont de nature
durable. Ainsi, lorsque la panne se produit, nous pouvons facilement récupérer les données de
ces journaux. Lorsque nous activons le journal d'écriture anticipée, Spark stocke les données
dans un système de fichiers tolérant aux pannes.
Récepteur fiable -Un récepteur fiable accuse réception de données à la source et les
stocke. La mise en œuvre de ce récepteur implique l'examen de la sémantique des
acquittements de la source.
Récepteur peu fiable -Un récepteur non fiable n'envoie pas d'accusé de réception à
une source. C'est pour les sources qui ne portent pas de mention. C'est aussi pour les
sources fiables quand on ne veut pas entrer dans la complexité de l'acquittement.