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.10Ich 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.jar
folgendeUmgebungsvariableexport HADOOP_HOME="/usr/local/share/hadoop-2.6.1"
export PATH=$PATH:$HADOOP_HOME/bin
export 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.