Spark-Cassandra 与 Spark-Elasticsearch
Posted
技术标签:
【中文标题】Spark-Cassandra 与 Spark-Elasticsearch【英文标题】:Spark-Cassandra Vs Spark-Elasticsearch 【发布时间】:2015-08-28 20:53:07 【问题描述】:我使用 Elasticsearch 已经有一段时间了,但几乎没有使用 Cassandra 的经验。
现在,我有一个项目,我们想使用 spark 处理数据,但我需要决定是否应该使用 Cassandra 或 Elasticsearch 作为数据存储来加载我的数据。
在连接器方面,Cassandra 和 Elasticsearch 现在都有一个很好的连接器来加载数据,因此这不会成为决定因素。
决定胜负的因素是我在 Spark 中加载数据的速度。我的数据将近 20 TB。
我知道我可以使用 JMeter 运行一些测试并自己查看结果,但我想问问熟悉这两个系统的人。
谢谢
【问题讨论】:
问题是什么? 是的,这取决于数据检索工作量。 Cassandra 非常擅长按键检索部分数据,从 spark 中您可以只按下主键和聚集键上的过滤器,否则对于全表扫描(select * from table)不太好。详细描述我们您的用例,因为 cassandra 和 elasticsearch 都是非常“垂直”的 DBMS 我的用例非常简单,我需要每天使用 Spark 为不同的用户 (1M+) 生成报告。现在,我需要将所有用户的数据从 Cassandra 或 Elasticsearch 加载到 Spark,同时运行 Cassandra 和 Elasticsearch 是没有意义的。 【参考方案1】:简短的确切答案是“取决于”,主要取决于集群大小 =)
我不会选择 Elastisearch 作为数据的主要来源,因为它擅长搜索。搜索是一项非常具体的任务,它需要一种非常具体的方法,在这种情况下,它使用倒排索引来存储实际数据。每个字段基本上都进入单独的索引,因此索引非常紧凑。尽管可以将完整的对象存储到索引中,但这样的索引几乎不会从压缩中获得任何好处。这需要更多的磁盘空间来存储索引和更多的 cpu 时钟,旋转磁盘来处理它们。
另一方面,Cassandra 非常擅长存储和检索数据。
没有任何或多或少的具体要求,我会说 Cassandra 擅长作为主存储(并提供非常简单的搜索场景),而 ES 擅长搜索。
【讨论】:
【参考方案2】:我将驳斥 Evgenii 关于 ES 如何只擅长搜索的回答。 YES ES 在文本搜索中超过,但这并不意味着它不能做数据。
您实际上可以将其视为“Mongo”风格的文档并对其运行“过滤”查询以快速获取结果。但是现在的问题变成了:您需要多快的读/写速度以及是否需要任何发行版? ES 缺乏的是分发。是的,ES 可以进行分片,但它在多区域分布和数据复制的可靠性方面存在问题。
如果您需要数据的灵活性/可靠性,我会选择 Cassanda。此外,由于您正在处理 TB - Cassandra 也可能是赢家,因为它适合超大容量。
如果您需要更轻松的时间来运行搜索(不限于文本搜索,例如:地理空间,您也可以这样做),那么 ES 可能更适合。 (注意你正在做的剪切体积,你需要分片来分配你的负载)。
【讨论】:
以上是关于Spark-Cassandra 与 Spark-Elasticsearch的主要内容,如果未能解决你的问题,请参考以下文章
Spark 1.3.x 的 org.apache.spark.sql.cassandra 的 API 文档在哪里?