mongodb + spark: 完整的大数据解决方案_Mongodb读取数据缓慢问题-Spark&Mongodb

本文分析了在MongoDB与Spark结合使用时遇到的大数据读取性能问题,通过监控和测试发现主要问题是数据插入不均衡导致的IO压力。提出了解决方案,包括寻找合理的预分片字段、采用中间存储、存储分离、数据量降级和使用缓存。还分享了一些监控和测试命令,以及Spark与Flink在处理MongoDB数据时的性能表现。
摘要由CSDN通过智能技术生成

问题

在我现在工作的集群环境上,读取基础表(30.6MB,47106条数据),耗时10秒,在另一个组(叫B组)吧,我的叫A组吧,的集群环境上耗时1毫秒。从mongodb的操作来看,其操作数超过了14000次/s。

问题分析

从后台的IO上来看,两个环境的sdb磁盘使用率都达到了100%。更仔细的话,发现两个环境中的资源写入量不同,我的组写入量在10MB/s~30MB/s,而B组环境写入量在500KB/s~1MB/s。简单的sdb磁盘使用率并不能代表mongodb的性能。所以要从从监控来看。

做一些测试

  1. 所有统计值是在业务组将其最大流量的业务去掉之后的统计值;
  2. 数据库数据量从739GB删除到208GB后的统计。

我的组

b92603f2d282eb2419bf45129f23802a.png

B组

bc9570f05cae34a8e745af633857e603.png

从平均网络传输来看,网络输入和输出均是我的环境的量更大。同时网络输出量比网络输入量大。而B组环境是因为业务不多,数据更多是流处理的写入数据,用于查询数据的批处理业务较少。因此,从网络传输量角度分析发现,我组存在大批量的文件传输。这些传输主要是表现在mongodb与磁盘交互的操作(查询、插入、更新、删除)。

Granfana监控能够监控当前mongodb的所有操作数量(A组)。

b386f11a35463c462749bbb9bbfe0b42.png

B组

701fe488bc7cbcd3a7389f12fabc7f0f.png

我组环境是B组环境的4倍。其中主要的操作是插入操作。这也解释了我组为什么IO比B组高的原因。但该操作数不能反映实际的操作,例如对于批插入操作,虽然只有1次操作,但是实际上mongodb进行多次操作。

将mongodb的各个分片的操作数进行统计,进行分析。统计方法如下:

比如现在我进入了mongos容器中发现,(以前容器生命周期是由K8S维护)

kubectl exec -it -n a-service mongodb-cdf487ds bash

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值