问题标签 [mongodb-cluster]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
996 浏览

mongodb - spark 连接到 mongoDB 分片集群,但没有获取数据

环境:

  1. 四个 Debian 9 服务器(命名为 visa0、visa1、visa2、visa3)
  2. Spark (v2.4.0) 集群在 4 个节点上(visa1:master,visa0..3:slave)
  3. MongoDB(v3.2.11)分片集群con 4节点(配置服务器副本集在visa1..3上,mongos在visa1上,分片服务器:visa0..3)
  4. 我正在使用安装了“spark-shell --packages org.mongodb.spark:mongo-spark-connector_2.11:2.4.0”的 Spark MongoDB 连接器
  5. 和 Jupyter Notebook,Python 3 (pyspark v. 2.4.0)

问题:

我可以创建一个连接到 master 的 SparkSession,并加载一个包含 Mongo 集合的全部内容的 DataFrame。事实上,我正确地得到了 DataFrame 模式。但是,使用数据帧上的 .count() 或 .show() 方法,我得到 0 个结果。

Python/pyspark 代码:

注意事项:

  • 使用相同代码连接到独立 mongo 服务器的相同测试工作正常(df.count() 给出正确的计数)。
  • 连接到 mongos,db.emails.count() 给出正确的计数
  • 配置服务器副本集似乎没问题(通过主服务器上的 rs.status() 命令)
  • 分片似乎没问题(通过 mongos 上的 sh.status() 命令)
  • 在 spark executors 上,我在 stderr 上得到以下信息:

    /li>
  • 在火花执行器上,我在标准输出上得到以下信息(请注意“集群:71 - 集群描述尚不可用。在超时前等待 30000 毫秒”):

    /li>

更新信息(感谢@kk1957 的回答)

进行进一步测试,我现在很确定问题来自 Jupyter Notebook 中的 SparkSession 对象初始化:

  • 当我启动 pyspark shell 时,如果我使用 pyspark 创建的“spark”对象,一切都会好起来的
  • 但是,如果我创建一个新的 SparkSession,我会重现缺少的结果。

使用默认火花会话:

但是,创建我自己的火花会话对象:

相同的代码,攻击单个 MongoDB(无分片)工作正常:

问题:

我很确定问题出在 Jupyter Notebook 中创建 SparkSession 对象的方式上,当它攻击 MongoDB 分片集群时。

你能帮我调试一下问题吗?

提前致谢

0 投票
1 回答
1911 浏览

mongodb - Spark Mongo 连接器,MongoShardedPartitioner 不起作用

出于测试目的,我配置了一个 4 节点集群,每个集群都有一个 Spark Worker 和一个 MongoDB Shard。这些是详细信息:

  • 四个 Debian 9 服务器(命名为 visa0、visa1、visa2、visa3)
  • Spark(v2.4.0) 集群在 4 个节点上(visa1:master,visa0..3:slave)
  • MongoDB(v3.2.11)分片集群con 4节点(配置服务器副本集在visa1..3上,mongos在visa1上,分片服务器:visa0..3)
  • 我正在使用安装了“spark-shell --packages org.mongodb.spark:mongo-spark-connector_2.11:2.4.0”的 MongoDB Spark 连接器

使用 配置 SparkSession 时MongoShardedPartitioner,从数据库加载的每个数据帧都是空的,尽管数据帧模式已正确获取。

这可以在spark-defaults.conf文件中或.config("spark.mongodb.input.partitioner" ,"MongoShardedPartitioner")在 SparkSession 构建器中完成配置。

, df.count MongoShardedPartitioner() == 0:

但无需指定分区程序即可正常工作:

问题:

  • 我如何知道默认配置了哪个分区器?
  • MongoShardedPartitioner在这种情况下如何使用?

提前致谢

2019 年 1 月 13 日:推荐的解决方法

正如下面所回答的,似乎MongoShardedPartitioner不支持将散列索引作为分片索引。但是,我需要一个哈希索引来将块均匀地分布在我的节点上,与时间无关(我猜使用 _id 会按时间顺序分布)。

我的解决方法是在数据库中使用计算出的日期桶的 md5 散列创建一个新字段,将其编入索引(作为普通索引),并将其用作分片索引。

现在,代码工作正常:

0 投票
1 回答
2113 浏览

mongodb - 无法从 kubernetes 集群连接到 mongodb atlas 集群

大家好,我无法从我的 kubernetes 集群连接到 mongo atlas 数据库作为 kubernetes 集群外部的服务。

这是我遵循的步骤。

在我的 nodejs 代码中使用 dbUri= 'mongodb://username:password' + process.env.MONGO_URL +'/database-name'

这是集群 ip 服务配置


然后我有相同服务的端点


然后我有我的部署,它想通过一个 env 变量将它用于 Pod


现在的问题是 mongo-cluster-ip-service 没有得到解决,所以我无法连接。我请求帮助

我遵循了谷歌最佳实践指南 https://cloud.google.com/blog/products/gcp/kubernetes-best-practices-mapping-external-services

0 投票
0 回答
34 浏览

nosql - 将 mongo 的新副本自动添加到 mongo 集群

我有 docker -swarm 和 3 个工作节点(每个节点都有 mongo 容器)。我配置了 mongo-cluster ("rs0")。当我扩展 mongo 服务(例如 docker service scale test_mongo1=2)时,我看到了新的 mongo 容器,但是这个 mongo 不在集群中。

如何配置 mongo 的服务或 mongo-cluster 自动将新的 mongo 的副本添加到 mongo 集群?

0 投票
1 回答
114 浏览

mongodb - MongoDB 显示打开的连接过多

我正在查看 MongoDB 日志,它显示如下内容:

[LogicalSessionCacheRefresh] 成功连接到 mongo1(现在有 13795 个连接打开到 mongo1,超时时间为 0 秒)

这是集群中的辅助节点与主节点建立的连接。

有人可以帮我理解“现在打开 13795 个连接”是什么意思吗?

我从这个链接得到了帮助,但在这方面没有多大用处。

0 投票
1 回答
5070 浏览

mongodb - Mongo - 保存文档时出错:1 在写入数据库时​​不是主要的

我正在使用 Robo 3T (robomongo) 连接 mongo 集群。我在编辑/删除文档时遇到此错误。

保存文档时出错:1 写入数据库时​​不是主要的

我用谷歌搜索了这个错误,许多解决方案都说连接到主集群,但我不知道如何?

0 投票
2 回答
436 浏览

reactjs - 在 Atlas Cluster 中使用 MongoDB Stitch App 处理用户

我有一个 MongoDB Stitch 应用程序,它使用电子邮件/密码身份验证。这会在 Stitch App 中创建用户,我可以在页面上进行身份验证。我的数据库也有一个 MongoDB Atlas Cluster。在集群中,我有一个带有项目名称的数据库,然后是一个用于“匹配”的集合。因此,当我将“匹配”插入集合时,我可以从 Stitch 发送经过身份验证的用户 ID,这样我就有办法查询特定用户的所有匹配。但是如何在缝合中向“用户”集合添加附加值?该用户部分在 Stitch 中使用您选择的任何身份验证类型(电子邮件/密码)预先打包。但是对于我的应用程序,我希望能够在“用户”集合上存储“MatchesWon”或“GamePreference”字段之类的内容。

我是否应该像在集群中为“匹配”创建一个集合一样为“用户”创建一个集合,然后插入从 Stitch 提供的用户 ID 并处理该集合中的字段?好像我会复制用户数据,但我不确定我是否理解另一种方法。仍在学习,我感谢任何反馈/建议。

0 投票
1 回答
1034 浏览

kubernetes - kubernetes 服务中的多个外部名称以使用连接字符串访问外部远程托管的 mongodb

我想通过 URI 将我的 Kubernetes 部署连接到远程托管的数据库。

我可以使用 Docker 通过 URI 连接到远程托管的数据库。现在我想了解如何在 Kubernetes 服务文件中指定多个外部名称。

我有一个MongoDB具有以下 URL 的集群:

我遵循了 Kubernetes 最佳实践:映射外部服务。当我设置一个外部名称时,它正在工作。

如何在外部名称中指定所有 3 个集群?

因为我无法创建多个外部名称。

我创建了无头服务,然后为该服务创建了端点。如“场景 1:具有 IP 地址的集群外部数据库”所述

从日志中,我认为正在建立连接。但后来出现了下面的异常,它被断开了。

因此,由于我们使用端点作为 ip 地址,并且它与部署 yaml 连接字符串中指定的连接字符串不匹配,因此它可能会失败。真的让我很困惑:)

PS:为了检查与外部 mongo 集群的连接,我启动了单个 pod

在日志中我可以看到它能够建立连接。

" 看起来您正试图在本机驱动程序端口上通过 HTTP 访问 MongoDB。"

所以我认为我之前创建的无头服务能够路由流量

需要你的建议。

0 投票
1 回答
1396 浏览

node.js - 错误的身份验证:[Symbol(mongoErrorContextSymbol)]: {}

我尝试通过 mLab.com 连接 MongoDB。它被重定向到 MongoDB Atlas。我创建了一个项目和集群。尝试连接时,我收到错误的身份验证错误,尽管我的凭据是正确的。

密码包含特殊字符。我也尝试用 ASCII 十六进制代码替换这些特殊字符,但没有响应。

我在下面的代码中替换了我的密码

配置/keys.js

服务器.js

结果:

0 投票
1 回答
427 浏览

mongodb - MongoDB 集群分片,没有主,只有一个辅助活动

我的 MongoDB Sharded Cluster 有 3 个分片,每个分片在 3 个副本上运行。总结一下:

如果看到上面的状态,问题就出在SHARD2.

  • 没有主要在SHARD2
  • 副本集配置如何标记shard23.server.com为非成员

辅助shard21.server.com可用于获取转储,因此可能不会丢失数据。但是,我对如何再次稳定集群一无所知?

如何SHARD2从集群中完全删除?或者我应该如何再次使用相同的服务器重新初始化分片?