Fazendo com que Spark, Python e MongoDB trabalhem juntos

Estou tendo dificuldade em unir esses componentes corretamente. Tenho o Spark instalado e funcionando com êxito, posso executar trabalhos localmente, autônomo e também via YARN. Eu segui os passos recomendados (o melhor que sei)aqui eaqui

Estou trabalhando no Ubuntu e as várias versões de componentes que tenho são

Faísca spark-1.5.1-bin-hadoop2.6Hadoop hadoop-2.6.1Mongo 2.6.10Conector Mongo-Hadoop clonado dehttps://github.com/mongodb/mongo-hadoop.gitPitão 2.7.10

Eu tive alguma dificuldade em seguir as várias etapas, como quais jarros adicionar a qual caminho, então o que eu adicionei são

no/usr/local/share/hadoop-2.6.1/share/hadoop/mapreduce Eu adicionei mongo-hadoop-core-1.5.0-SNAPSHOT.jarOs seguintesvariáveis ambientaisexport 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

Meu programa Python é básico

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

Estou executando-o usando o comando

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

e estou obtendo a seguinte saída como resultado

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

De acordo comaqui

Essa exceção é gerada quando ocorre uma exceção no código do cliente Java. Por exemplo, se você tentar exibir um elemento de uma pilha vazia. A instância da exceção Java lançada é armazenada no membro java_exception.

Olhando o código fonte parapymongo_spark.py e a linha que lança o erro, diz

"Erro ao se comunicar com a JVM. O jar do MongoDB Spark está no CLASSPATH do Spark?:"

Então, em resposta, tentei garantir que os frascos certos estivessem sendo passados, mas posso estar fazendo tudo errado, veja abaixo

$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

Eu importeipymongo no mesmo programa python para verificar se posso acessar pelo menos o MongoDB usando isso e posso.

Eu sei que existem algumas partes móveis aqui, portanto, se eu puder fornecer mais informações úteis, entre em contato.

questionAnswers(4)

yourAnswerToTheQuestion