问题标签 [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.
mongodb - spark 连接到 mongoDB 分片集群,但没有获取数据
环境:
- 四个 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”的 Spark MongoDB 连接器
- 和 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 分片集群时。
你能帮我调试一下问题吗?
提前致谢
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 散列创建一个新字段,将其编入索引(作为普通索引),并将其用作分片索引。
现在,代码工作正常:
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
nosql - 将 mongo 的新副本自动添加到 mongo 集群
我有 docker -swarm 和 3 个工作节点(每个节点都有 mongo 容器)。我配置了 mongo-cluster ("rs0")。当我扩展 mongo 服务(例如 docker service scale test_mongo1=2)时,我看到了新的 mongo 容器,但是这个 mongo 不在集群中。
如何配置 mongo 的服务或 mongo-cluster 自动将新的 mongo 的副本添加到 mongo 集群?
mongodb - MongoDB 显示打开的连接过多
我正在查看 MongoDB 日志,它显示如下内容:
[LogicalSessionCacheRefresh] 成功连接到 mongo1(现在有 13795 个连接打开到 mongo1,超时时间为 0 秒)
这是集群中的辅助节点与主节点建立的连接。
有人可以帮我理解“现在打开 13795 个连接”是什么意思吗?
我从这个链接得到了帮助,但在这方面没有多大用处。
mongodb - Mongo - 保存文档时出错:1 在写入数据库时不是主要的
我正在使用 Robo 3T (robomongo) 连接 mongo 集群。我在编辑/删除文档时遇到此错误。
保存文档时出错:1 写入数据库时不是主要的
我用谷歌搜索了这个错误,许多解决方案都说连接到主集群,但我不知道如何?
reactjs - 在 Atlas Cluster 中使用 MongoDB Stitch App 处理用户
我有一个 MongoDB Stitch 应用程序,它使用电子邮件/密码身份验证。这会在 Stitch App 中创建用户,我可以在页面上进行身份验证。我的数据库也有一个 MongoDB Atlas Cluster。在集群中,我有一个带有项目名称的数据库,然后是一个用于“匹配”的集合。因此,当我将“匹配”插入集合时,我可以从 Stitch 发送经过身份验证的用户 ID,这样我就有办法查询特定用户的所有匹配。但是如何在缝合中向“用户”集合添加附加值?该用户部分在 Stitch 中使用您选择的任何身份验证类型(电子邮件/密码)预先打包。但是对于我的应用程序,我希望能够在“用户”集合上存储“MatchesWon”或“GamePreference”字段之类的内容。
我是否应该像在集群中为“匹配”创建一个集合一样为“用户”创建一个集合,然后插入从 Stitch 提供的用户 ID 并处理该集合中的字段?好像我会复制用户数据,但我不确定我是否理解另一种方法。仍在学习,我感谢任何反馈/建议。
kubernetes - kubernetes 服务中的多个外部名称以使用连接字符串访问外部远程托管的 mongodb
我想通过 URI 将我的 Kubernetes 部署连接到远程托管的数据库。
我可以使用 Docker 通过 URI 连接到远程托管的数据库。现在我想了解如何在 Kubernetes 服务文件中指定多个外部名称。
我有一个MongoDB
具有以下 URL 的集群:
我遵循了 Kubernetes 最佳实践:映射外部服务。当我设置一个外部名称时,它正在工作。
如何在外部名称中指定所有 3 个集群?
因为我无法创建多个外部名称。
我创建了无头服务,然后为该服务创建了端点。如“场景 1:具有 IP 地址的集群外部数据库”所述
从日志中,我认为正在建立连接。但后来出现了下面的异常,它被断开了。
因此,由于我们使用端点作为 ip 地址,并且它与部署 yaml 连接字符串中指定的连接字符串不匹配,因此它可能会失败。真的让我很困惑:)
PS:为了检查与外部 mongo 集群的连接,我启动了单个 pod
在日志中我可以看到它能够建立连接。
" 看起来您正试图在本机驱动程序端口上通过 HTTP 访问 MongoDB。"
所以我认为我之前创建的无头服务能够路由流量
需要你的建议。
node.js - 错误的身份验证:[Symbol(mongoErrorContextSymbol)]: {}
我尝试通过 mLab.com 连接 MongoDB。它被重定向到 MongoDB Atlas。我创建了一个项目和集群。尝试连接时,我收到错误的身份验证错误,尽管我的凭据是正确的。
密码包含特殊字符。我也尝试用 ASCII 十六进制代码替换这些特殊字符,但没有响应。
我在下面的代码中替换了我的密码
配置/keys.js
服务器.js
结果:
mongodb - MongoDB 集群分片,没有主,只有一个辅助活动
我的 MongoDB Sharded Cluster 有 3 个分片,每个分片在 3 个副本上运行。总结一下:
如果看到上面的状态,问题就出在SHARD2
.
- 没有主要在
SHARD2
- 副本集配置如何标记
shard23.server.com
为非成员
辅助shard21.server.com
可用于获取转储,因此可能不会丢失数据。但是,我对如何再次稳定集群一无所知?
如何SHARD2
从集群中完全删除?或者我应该如何再次使用相同的服务器重新初始化分片?