Zusammenarbeiten von Spark, Python und MongoDB

Ich habe Schwierigkeiten, diese Komponenten richtig zusammenzufügen. Ich habe Spark installiert und arbeite erfolgreich. Ich kann Jobs lokal, eigenständig und auch über YARN ausführen. Ich habe die empfohlenen Schritte befolgt (nach bestem Wissen)Hie undHie

Ich arbeite an Ubuntu und die verschiedenen Komponentenversionen, die ich habe, sind

Funk spark-1.5.1-bin-hadoop2.6 Hadoop hadoop-2.6.1 Mongo 2.6.10 Mongo-Hadoop-Anschluss von @ geklohttps: //github.com/mongodb/mongo-hadoop.giPytho 2.7.10

Ich hatte einige Schwierigkeiten, die verschiedenen Schritte zu befolgen, z. B. welche Gläser zu welchem Pfad hinzugefügt werden solle

im/usr/local/share/hadoop-2.6.1/share/hadoop/mapreduce Ich habe hinzugefüg mongo-hadoop-core-1.5.0-SNAPSHOT.jarfolgendeUmgebungsvariableexport HADOOP_HOME="/usr/local/share/hadoop-2.6.1"export PATH=$PATH:$HADOOP_HOME/binexport SPARK_HOME="/usr/local/share/spark-1.5.1-bin-hadoop2.6"export PYTHONPATH="/usr/local/share/mongo-hadoop/spark/src/main/python"export PATH=$PATH:$SPARK_HOME/bin

Mein Python-Programm ist einfach

from pyspark import SparkContext, SparkConf
import pymongo_spark
pymongo_spark.activate()

def main():
    conf = SparkConf().setAppName("pyspark test")
    sc = SparkContext(conf=conf)
    rdd = sc.mongoRDD(
        'mongodb://username:password@localhost:27017/mydb.mycollection')

if __name__ == '__main__':
    main()

Ich starte es mit dem Befehl

$SPARK_HOME/bin/spark-submit --driver-class-path /usr/local/share/mongo-hadoop/spark/build/libs/ --master local[4] ~/sparkPythonExample/SparkPythonExample.py

und ich erhalte die folgende Ausgabe als Ergebnis

Traceback (most recent call last):
  File "/home/me/sparkPythonExample/SparkPythonExample.py", line 24, in <module>
    main()
  File "/home/me/sparkPythonExample/SparkPythonExample.py", line 17, in main
    rdd = sc.mongoRDD('mongodb://username:password@localhost:27017/mydb.mycollection')
  File "/usr/local/share/mongo-hadoop/spark/src/main/python/pymongo_spark.py", line 161, in mongoRDD
    return self.mongoPairRDD(connection_string, config).values()
  File "/usr/local/share/mongo-hadoop/spark/src/main/python/pymongo_spark.py", line 143, in mongoPairRDD
    _ensure_pickles(self)
  File "/usr/local/share/mongo-hadoop/spark/src/main/python/pymongo_spark.py", line 80, in _ensure_pickles
    orig_tb)
py4j.protocol.Py4JError

GemäßHie

Diese Ausnahme wird ausgelöst, wenn im Java-Client-Code eine Ausnahme auftritt. Zum Beispiel, wenn Sie versuchen, ein Element aus einem leeren Stapel zu entfernen. Die Instanz der ausgelösten Java-Ausnahme wird im Member java_exception gespeichert.

Sehen Sie sich den Quellcode für @ pymongo_spark.py und in der Zeile, die den Fehler auslöst, steht

"Fehler bei der Kommunikation mit der JVM. Ist die MongoDB Spark-JAR in Spark's CLASSPATH?"

Als Antwort habe ich versucht sicherzustellen, dass die richtigen Gläser übergeben werden, aber ich mache das möglicherweise falsch, siehe unten

$SPARK_HOME/bin/spark-submit --jars /usr/local/share/spark-1.5.1-bin-hadoop2.6/lib/mongo-hadoop-spark-1.5.0-SNAPSHOT.jar,/usr/local/share/spark-1.5.1-bin-hadoop2.6/lib/mongo-java-driver-3.0.4.jar --driver-class-path /usr/local/share/spark-1.5.1-bin-hadoop2.6/lib/mongo-java-driver-3.0.4.jar,/usr/local/share/spark-1.5.1-bin-hadoop2.6/lib/mongo-hadoop-spark-1.5.0-SNAPSHOT.jar --master local[4] ~/sparkPythonExample/SparkPythonExample.py

Ich habe @ importiepymongo an dasselbe Python-Programm senden, um zu überprüfen, ob ich damit mindestens auf MongoDB zugreifen kann, und ich kann.

Ich weiß, dass es hier einige bewegliche Teile gibt. Wenn ich weitere nützliche Informationen liefern kann, lass es mich bitte wissen.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage