La compréhension de l'Étincelle de la sérialisation
Spark, comment fait-on savoir quels objets sont instanciés sur le conducteur et qui sont instanciées sur exécuteur testamentaire , et par conséquent comment déterminer quelles classes doit implémenter Serializable ?
Ce post peut être utile
OriginalL'auteur KrazyGautam | 2016-11-26
Vous devez vous connecter pour publier un commentaire.
Pour sérialiser un objet de moyens pour la conversion de son état à un flux d'octets, de sorte que le flux d'octets peut être repris dans une copie de l'objet. Un objet Java est sérialisable si sa classe ou de l'une de ses superclasses met en œuvre le java.io.L'interface Serializable ou de ses subinterface, java.io.Externalizable.
Une classe n'est jamais sérialisé seulement un objet d'une classe est sérialisé. Sérialisation d'un objet est nécessaire si l'objet doit être conservé ou transmis sur le réseau .
Prenons un exemple Étincelle code et allez par le biais de divers scénarios
De l'accessibilité et de Serializability de la variable d'instance à partir de l'intérieur d'une Classe interne des objets de la classe
Règle de base lors de la compréhension de l'Étincelle de l'emploi est :
Tous les lambda fonctions écrites à l'intérieur de la RDD sont instanciés sur le conducteur et les objets sont sérialisés et envoyé aux exécuteurs
Si tout extérieur de la classe des variables d'instance sont accessibles à l'intérieur de la classe, le compilateur appliquer une logique différente pour y accéder, donc extérieur de la classe est sérialisée ou non dépend de quoi avez-vous accès.
En termes de Java, tout le débat est sur la classe vs Intérieur de la classe et comment l'accès externe références de classe et les variables conduit à la sérialisation.
Différents scénarios:
Extérieur de la classe les variables accessibles dans la classe Anonyme :
Variable d'Instance (à l'Extérieur de la classe)
Compilateur par défaut insère constructeur dans le byte code de la
Classe anonyme avec référence à l'Extérieur de la classe de l'objet .
L'extérieur de la classe d'objet est utilisé pour accéder à la variable d'instance
Anonyme-classe(){
}
L'extérieur de la classe est sérialisé et envoyé avec le
objet sérialisé de l'intérieur de la classe anonyme
Statique de la Variable d'Instance (à l'Extérieur de la classe)
Comme variables statiques ne sont pas numérotés , extérieur de la classe
l'objet est toujours insérée dans l'anonymat le constructeur de la classe .
La valeur de la variable statique est pris à partir de l'état de classe
présents sur cet exécuteur testamentaire .
Variable locale (à l'Extérieur de la classe)
Compilateur par défaut insère constructeur dans le byte code de la
Classe anonyme avec référence à l'objet de classe ET la variable locale refrence.
L'extérieur de la classe d'objet est utilisé pour accéder à la variable d'instance
Anonyme-classe(){
}
L'extérieur de la classe est sérialisé , et la variable locale de l'objet est également
sérialisé et envoyé en même temps que l'objet sérialisé de l'intérieur de la classe anonyme
Que la variable locale devient un membre de l'instance à l'intérieur de la classe anonyme il doit être sérialisé . De l'extérieur de la classe point de vue de la variable locale ne peut jamais être sérialisé
----------
Extérieur de variables de classe accessible avec Statique à l'intérieur de la classe.
Variable d'Instance (à l'Extérieur de la classe)
ne peut pas être consulté
Variable locale (à l'Extérieur de la classe)
ne peut pas être consulté
Statique de la Variable d'Instance (à l'Extérieur de la classe)
Comme variables statiques ne sont pas numérotés, donc pas extérieur de la classe d'objet est sérialisé.
La valeur de la variable statique est pris à partir de l'état de classe
présents sur cet exécuteur testamentaire .
Extérieur de la classe n'est pas sérialisé et de l'envoyer avec la sérialisé Statique à l'intérieur de la classe
Points à réfléchir:
La Sérialisation Java règles sont suivies pour sélectionner la classe de l'objet doit être sérialisé .
Utilisation javap -p -c "abc.class" déballer le byte code et de voir le code généré par le compilateur,
En fonction de ce que vous essayez d'accéder à l'intérieur de la classe de l'extérieur de la classe, le compilateur génère différents de byte code.
Vous n'avez pas besoin de créer des classes de mettre en œuvre la Sérialisation qui sont uniquement accessibles sur le conducteur .
Anonyme/classe statique (toutes les fonction lambda sont la classe anonyme) utilisé à l'intérieur CA va être instancié sur le pilote .
Toute classe/variable utilisée à l'intérieur CA va être instancié sur le conducteur et envoyé aux exécuteurs .
Toute variable d'instance a déclaré transitoire ne sera pas sérialisé sur le conducteur.
à partir du pilote d'exécuteurs
maverickgautam.blogspot.de oui c'est mon blog . Désolé pour le lien incorrect .
bytepadding.com/big-data/spark/...
OriginalL'auteur KrazyGautam