【发布时间】:2016-09-12 03:19:38
【问题描述】:
我的项目是为用户实现交互查询以发现该数据。就像我们有一个列列表,用户可以选择然后用户添加到列表并按查看数据。 Cassandra 中的当前数据存储,我们使用 Spark SQL 从中查询。
数据流是我们有一个原始日志,经过 Spark 存储处理到 Cassandra 中。数据是具有 20 多列和 4 个指标的时间序列。目前我进行了测试,因为集群键有 20 多个维度,所以写入 Cassandra 很慢。
这里的想法是将所有数据从 Cassandra 加载到 Spark 中并将其缓存在内存中。向客户端提供 API 并在 Spark Cache 上运行查询。 但我不知道如何保持缓存的数据持续存在。我尝试使用他们有功能调用share object 的 spark-job-server。但不确定它是否有效。
我们可以提供具有 40 多个 CPU 内核和 100 GB RAM 的集群。我们估计要查询的数据约为 100 GB。
我已经尝试过的:
- 尝试存储在Alluxio并从中加载到Spark,但加载时间很慢,因为当它加载4GB数据时,Spark需要做两件事首先从Alluxio读取需要1分钟以上,然后存储到磁盘(Spark随机播放)花费超过 2 或 3 分钟。这意味着超过我们设定的 1 分钟以内的时间。我们在 8 个 CPU 内核中测试了 1 个作业。
- 尝试存储在 MemSQL 中,但有点昂贵。 1天它花费了2GB RAM。不确定当我们扩展时速度是否保持良好。
- 尝试使用 Cassandra,但 Cassandra 不支持 GROUP BY。
所以,我真正想知道的是我的方向是对还是错?我可以改变什么来归档目标(查询,如 MySQL,有很多 group by、SUM、ORDER BY)通过 API 返回到客户端。
【问题讨论】:
标签: caching apache-spark cassandra spark-jobserver