Wenn in einem Spark-Job eine JAR-Datei benötigt wird, muss sie auf zwei Arten in den Spark-Job eingefügt werden:
1. --jar path
Option im Befehl.
2. SparkContext.addJar("path")
.
Kann mir jemand den Unterschied zwischen den beiden Möglichkeiten sagen?
Von this question, die Antwort ist sie sind identisch und nur die Priorität ist anders, aber ich denke nicht, dass es wahr ist. Wenn ich den Funke-Job im Garn-Cluster-Modus einreiche, funktioniert die Funktion addJar() nicht, wenn JAR-Dateien nicht in der Option --jars
im Befehl gemäß official site enthalten sind.SparkContext.addJar funktioniert nicht im lokalen Modus
Die --jars Option ermöglicht die SparkContext.addJar Funktion zu arbeiten, wenn Sie es mit lokalen Dateien verwenden und in Garn-Cluster-Modus ausgeführt wird. Es muss nicht verwendet werden, wenn Sie es mit HDFS, HTTP, HTTPS, oder FTP-Dateien verwenden.
Der Grund ist, dass der Treiber auf einem anderen Computer als der Client ausgeführt wird. So scheint es, dass die Option --jars
im Befehl vom Client ist und die Funktion addJar()
kann nur auf Gläser im Treiber arbeiten.
Dann habe ich einen Test im lokalen Modus.
1. spark-shell --master local --jars path/to/jar
Wenn ich Funken Schale auf diese Weise Objekt im Glas beginnen in der Funkenschale
2. spark-shell --master local
verwendet werden, wenn ich Funken Shell starten auf diese Weise und verwenden sc.addJar("path/to/jar")
, Objekte innerhalb der JAR-Datei können nicht in die Spark-Shell importiert werden und ich habe class cannot be found
Fehler.
Meine Fragen sind:
Warum das Verfahren SparkContext.addJar()
nicht im lokalen Modus funktioniert?
Was ist der Unterschied zwischen SparkContext.addJar()
und --jars
?
Meine Umgebung: Hortonworks 2.5 Cluster und Version von Spark ist 1.6.2. Ich weiß es zu schätzen, wenn irgendjemand etwas dazu aufklären kann.