【发布时间】:2018-01-12 14:38:48
【问题描述】:
我的问题是关于使用官方连接器从 Apache Spark 连接到 MongoDB。
堆栈版本如下:
- Apache Spark 2.2.0(HDP 构建:
2.2.0.2.6.3.0-235) - MongoDB 3.4.10(带身份验证的 2x 节点副本集)
我使用这些罐子:
- mongo-spark-connector-assembly-2.2.0.jar 我尝试从Maven repo 下载并使用适当的Mongo Driver version 自己构建
- 从Maven Repo下载的mongo-java-driver.jar
他们都说,方法 was renamed 从 Spark 2.2.0 开始,所以我需要使用 2.2.0 版本的连接器 - 是的,here 是 spark 连接器 2.1.1 中的方法,并且here 在 2.2.0 中更名为 one
但我确信,我使用的是正确的。我做了这些步骤:
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;
我想我确定这个方法不在罐子里: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 相关文件。 请帮忙,我做错了什么?提前致谢
【问题讨论】:
标签: mongodb apache-spark connector