Spark Mongo连接器如何验证读取首选项

时间:2016-12-01 16:20:47

标签: mongodb apache-spark

我正在使用spark mongo连接器(https://docs.mongodb.com/spark-connector/)。如果我正在使用的读取配置设置是正确的,我想要修改几件事情。我正在使用读取配置

val courseReadConfig = ReadConfig(Map(
  "uri" -> "mongodb://ip:port/db.collection?read_preference=Primary([{\"cloudType\" : \"aws\",\"dataCenter\" : \"us-east-1\"}])",
  "partitionerOptions.shardkey" -> "key",
  "partitioner" -> "MongoShardedPartitioner"
 )) 

另一件事是我正在向Mongos服务器进行读取查询,我想知道mongos然后处理该查询,并且在将来自Mongos的网络拓扑结构中之后将结果发送回火花或者产生火花,向各个mongo servrers / primary / secondary请求读取数据..

谢谢, PRASHANT

1 个答案:

答案 0 :(得分:1)

设置readPreference.namereadPreference.tags所需的ReadPreference,文档不再正确,例如:

val courseReadConfig = ReadConfig(Map(
  "uri" -> "mongodb://ip:port/db.collection"
  "readPreference.name"="primary",
  "readPreference.tags"="""[{"cloudType" : "aws", "dataCenter" : "us-east-1"}]""",
  "partitionerOptions.shardkey" -> "key",
  "partitioner" -> "MongoShardedPartitioner"
)) 
  

我想知道查询是否由mongos处理,然后将结果发送回spark或从Mongos获取网络拓扑后是否产生火花

首先进行分区,然后对每个分区,Spark Worker将连接到URI并获取其结果部分。这意味着从Workers到Mongo的任何连接都将通过URI中提供的MongoS之一完成。如果您只提供一个,那么所有Spark Worker都将使用MongoS,因此出于冗余和性能目的,您应该提供多个。在文档的“How can I achieve data locality?”部分中有更多信息。 Mongo Spark Connector不会直接连接到分片上的MongoD,因为这会冒错误信息返回给用户。