Wie können wir im Apache Spark-Programm wissen, welcher Teil des Codes im Treiberprogramm ausgeführt wird und welcher Teil des Codes in Worker-Knoten ausgeführt wird?differenzieren Treibercode und Arbeitscode in Apache Spark
Mit freundlichen Grüßen
Wie können wir im Apache Spark-Programm wissen, welcher Teil des Codes im Treiberprogramm ausgeführt wird und welcher Teil des Codes in Worker-Knoten ausgeführt wird?differenzieren Treibercode und Arbeitscode in Apache Spark
Mit freundlichen Grüßen
Es ist eigentlich ziemlich einfach. Alles, was innerhalb der durch eine Transformation erzeugten Schließung geschieht, geschieht auf einem Arbeiter. Es bedeutet, wenn etwas innerhalb passiert map(...)
, filter(...)
, mapPartitions(...)
, groupBy*(...)
, aggregateBy*(...)
wird auf den Arbeitern ausgeführt. Es beinhaltet das Lesen von Daten aus einem persistenten Speicher oder aus entfernten Quellen.
Aktionen wie count
, , fold(...)
werden normalerweise sowohl vom Treiber als auch von den Mitarbeitern ausgeführt. Das schwere Heben wird parallel von den Arbeitern durchgeführt, und einige abschließende Schritte, wie das Reduzieren der von den Arbeitern erhaltenen Leistungen, wird sequentiell beim Fahrer durchgeführt.
Alles andere, wie das Auslösen einer Aktion oder Transformation passiert beim Treiber. Insbesondere bedeutet es jede Aktion, die Zugriff auf SparkContext
erfordert. In PySpark bedeutet dies auch eine Kommunikation mit Py4j Gateway.
Alle Schließungen übergeben als Argument zur Methode von JavaRDD/JavaPairRDD/ähnlich und einige Methoden dieser Klassen werden von Spark-Knoten ausgeführt. Alles andere ist Treibercode.
Ich danke Ihnen! –