从Spark 2.2.0连接到MongoDB时出现问题

时间:2018-01-12 14:38:48

标签: mongodb apache-spark connector

我的问题是使用官方连接器从Apache Spark连接到MongoDB。

堆栈版本如下:

  • Apache Spark 2.2.0(HDP版本:2.2.0.2.6.3.0-235
  • MongoDB 3.4.10(带有身份验证的2x节点副本集)

我使用这些罐子:

问题与版本通信有关,如herehere所述。

他们都说,自Spark 2.2.0以来的方法was renamed所以我需要使用2.2.0版本的连接器 - 是的,here是spark连接器2.1中的方法.1,here在2.2.0中重命名为

但我相信,我使用的是正确的。我做了这些步骤:

git clone https://github.com/mongodb/mongo-spark.git
cd mongo-spark
git checkout tags/2.2.0
sbt check
sbt assembly
scp target/scala-2.11/mongo-spark-connector_2.11-2.2.0.jar user@remote-spark-server:/opt/jars

所有测试都没问题。之后我使用pyspark和Zeppelin(所以部署模式是客户端)从MongoDB读取一些数据:

df = sqlc.read.format("com.mongodb.spark.sql.DefaultSource") \
    .option('spark.mongodb.input.uri', 'mongodb://user:password@172.22.100.231:27017,172.22.100.234:27017/dmp?authMechanism=SCRAM-SHA-1&authSource=admin&replicaSet=rs0&connectTimeoutMS=300&readPreference=nearest') \
    .option('collection', 'verification') \
    .option('sampleSize', '10') \
    .load()

df.show()

得到了这个错误:

Py4JJavaError: An error occurred while calling o86.load.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 4 times, most recent failure: 
Lost task 0.3 in stage 0.0 (TID 3, worker01, executor 1): java.lang.NoSuchMethodError:org.apache.spark.sql.catalyst.analysis.TypeCoercion$.findTightestCommonTypeOfTwo()Lscala/Function2;

我认为这个方法不在jar中:TypeCoercion$.findTightestCommonTypeOfTwo()

我转到SparkUI并查看环境:

spark.repl.local.jars   file:file:/opt/jars/mongo-spark-connector-assembly-2.2.0.jar,file:/opt/jars/mongo-java-driver-3.6.1.jar

并且在任何地方都没有与MongoDB相关的文件。 请帮忙,我做错了什么?提前致谢

1 个答案:

答案 0 :(得分:0)