我需要实现一个大数据存储+处理系统。
数据每天都在增加(最多5000万行/天),数据来自一个非常简单的json文档,大约有10个字段(日期、数字、文本、ID)。
然后可以在线查询数据(如果可能的话),对文档的某些字段(日期范围查询、id等)进行任意分组。
我正在考虑使用mongodb集群来存储所有这些数据,并为我需要查询的字段建立索引,然后在apachespark集群中处理数据(主要是简单的聚合+排序)。也许可以使用spark jobserver围绕它构建restapi。
我担心mongodb扩展的可能性(即存储10b+行)和吞吐量(快速发送1b+行到spark进行处理)或在如此大的数据库中维护索引的能力。
相比之下,我考虑使用cassandra或hbase,我认为它们更适合存储大型数据集,但在查询方面提供的性能较低,如果我要提供在线查询的话,我最终需要这些性能。
1-mongodb+spark是这种用例的经验证的栈吗?
2-mongodb(存储+查询性能)的可伸缩性是无限的吗?
提前谢谢
2条答案
按热度按时间3duebb1j1#
几乎任何nosql数据库都可以满足您存储数据的需要。您是对的,mongodb在查询数据时提供了一些超过hbase和cassandra的额外的。但是,elasticsearch是一个经过验证的解决方案,用于高速存储和检索/查询数据(度量)。
以下是有关将elasticsearch与spark结合使用的更多信息:
https://www.elastic.co/guide/en/elasticsearch/hadoop/master/spark.html
实际上我会用完整的麋鹿堆。因为kibana将允许您通过可视化功能(图表等)轻松地浏览数据。
我打赌你已经有了spark,所以我建议你在同一台机器/集群上安装elk堆栈来测试它是否适合你的需要。
ny6fqffe2#
如前所述,有许多nosql解决方案可以满足您的需求。我可以推荐mongodb与spark*一起使用,特别是如果您有大型mongodb集群的操作经验的话。
有一份白皮书是关于从mongodb将分析转化为实时查询的。也许更有趣的是东航的博客文章,内容是关于他们使用mongodb和spark,以及它如何支持他们每天16亿次的航班搜索。
关于数据大小,那么在mongodb中管理一个包含那么多数据的集群是很正常的。任何解决方案的性能部分将是快速发送1b+文档到spark进行处理。并行性和利用数据局部性是这里的关键。此外,您的spark算法需要这样才能利用并行性—洗牌大量数据需要花费大量时间。
免责声明:我是mongodb spark connector的作者,为mongodb工作。