Как заставить Spark, Python и MongoDB работать вместе

Я испытываю трудности при правильном соединении этих компонентов. У меня установлена ​​и успешно работает Spark, я могу запускать задания локально, автономно, а также через YARN. Я следовал советам (насколько мне известно)Вот а такжеВот

Я работаю над Ubuntu, и у меня есть разные версии компонентов

искра искровым 1.5.1-бен-hadoop2.6Hadoop Hadoop-2.6.1Монго 2.6.10Разъем Mongo-Hadoop клонирован изhttps://github.com/mongodb/mongo-hadoop.gitпитон 2.7.10

У меня были некоторые трудности с выполнением различных шагов, например, какие банки добавить к какому пути, поэтому я добавил следующее:

в/usr/local/share/hadoop-2.6.1/share/hadoop/mapreduce я добавил mongo-hadoop-core-1.5.0-SNAPSHOT.jarследующиепеременные средыexport 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

Моя программа на Python является базовой

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()

Я запускаю его с помощью команды

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

и я получаю следующий вывод в результате

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

В соответствии сВот

Это исключение возникает, когда возникает исключение в клиентском коде Java. Например, если вы попытаетесь извлечь элемент из пустого стека. Экземпляр сгенерированного исключения Java хранится в элементе java_exception.

Глядя на исходный код дляpymongo_spark.py и строка выбрасывает ошибку, это говорит

"Ошибка связи с JVM. Является ли банка MongoDB Spark на CLASSPATH в Spark?"

Поэтому в ответ я попытался убедиться, что правильные банки пропущены, но, возможно, я все делаю неправильно, см. Ниже.

$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

Я импортировалpymongo в ту же программу на Python, чтобы убедиться, что я могу по крайней мере получить доступ к MongoDB, используя это, и я могу.

Я знаю, что здесь довольно много движущихся частей, поэтому, если я смогу предоставить более полезную информацию, пожалуйста, дайте мне знать.

Ответы на вопрос(4)

Ваш ответ на вопрос