Mongo Spark连接器和mongo 3.2,root用户无法读取数据库

时间:2016-09-19 15:30:11

标签: mongodb apache-spark

我使用官方的mongo spark连接器。

  • 我的火花版本是2.0
  • 我的mongo版本是3.2.x
  • 我的spark mongo连接器是1.1.0

在我的数据库中,我有一个管理员具有root角色,所以他没事。

我创建了一个配置如下:

     val readConfig = ReadConfig(Map("spark.mongodb.auth.uri" -> "mongodb://<userName>:<password>@<ip>:27017/admin",
"spark.mongodb.input.uri" -> "mongodb://<ip>:27017/MyDatabase.myCollection"))

但是当我尝试读取某些数据时,我收到错误“未授权执行命令。”

我不明白为什么我的root用户没有被授权。

3 个答案:

答案 0 :(得分:6)

因为@(await Component.InvokeAsync("NameViewComponent", "some name")) @(await Component.InvokeAsync("NameViewComponent", "some name1")) @(await Component.InvokeAsync("NameViewComponent", "some name2")) //etc... 不是配置设置。

由于输入uri没有认证参数,因此未授权读取。

尝试:

"spark.mongodb.auth.uri"

或:

 val readConfig = ReadConfig(Map(
     "uri" -> "mongodb://<userName>:<password>@<ip>:27017/myDatabase.myCollection?authSource=admin"))

答案 1 :(得分:1)

要避免进行全面扫描,可以执行以下操作:

val rdd = MongoSpark.load(sc)

val aggregatedRdd = rdd.withPipeline(Seq(Document.parse("{ $match: { test : { $gt : 5 } } }")))
println(aggregatedRdd.count)
println(aggregatedRdd.first.toJson)

答案 2 :(得分:0)

Find below implementation for Spark SQL Mongo Spark connector for admin DB having authentication:
1] Mongo uri:- mongodb://userid:pw@ip:port
2] sparkSessionCtx = SparkSession
  .builder()      
  .appName(appName)
  .config("spark.mongodb.input.uri", uri+ "/" + dbName + "." + collName+ "?authSource=admin")
  .config("spark.mongodb.output.uri", uri+ "/" + dbName + "." + collName+ "?authSource=admin")
  .getOrCreate()
3] val readConfiguration = ReadConfig(Map("database" -> dbName, "collection" -> collectionName, "readPreference.name" -> "primaryPreferred" ), Some(ReadConfig(sparkSessionCtx)))
mongodataframe = MongoSpark.load(sparkSessionCtx , readConfiguration)