我正在使用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
答案 0 :(得分:1)
设置readPreference.name
和readPreference.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,因为这会冒错误信息返回给用户。