从 Spark Cache VS 数据库中检索数据缓慢

Posted

技术标签:

【中文标题】从 Spark Cache VS 数据库中检索数据缓慢【英文标题】:Slow data retrieval from Spark Cache VS Database 【发布时间】:2015-07-02 12:40:16 【问题描述】:

我们引入了 Spark Cache 来在我们的产品中处理内存中的数据,因为在数据量巨大(BIG DATA)的情况下积极处理远程数据库过于耗时。

现在我们注意到,一旦将数据加载到 spark 中,响应速度会比直接查询原始源(远程数据库)更慢

我们正在使用 sparkSQL 来检索数据,并且相同的查询从远程数据库中返回的方式更早,因为同一台计算机上的单个节点的 Spark 缓存滞后了很长时间。

任何指导将不胜感激。

使用 Spark UI 快照的示例查询:

SELECT column1, SUM(column2) FROM tableName WHERE column2 > 200 GROUP BY column1 ORDER BY column1

数据100% 加载在 Spark 内存中。 See Image 从 Spark 加载结果最多需要 15 分钟。 See Image Spark Cache 包含大约 50,000 条记录。并且测试查询的机器具有 16 个 CPU 内核64GB 内存

我的问题是 50,000 条记录什么都不是,为什么它需要这么多分钟而不是几毫秒。每件事都在本地机器上完成。

【问题讨论】:

【参考方案1】:

首先,检查数据集是否 100% 缓存(例如在 Spark UI 中)。如果没有,Spark 必须远程或从磁盘获取一些数据,并将其与内存中的数据相结合。

其次,Spark 可能不如专用数据库快,因此通过网络从速度非常快的数据库传输结果可能比让通用引擎计算结果要快,特别是如果数据库运行在单机。

【讨论】:

我已经更新了原始帖子并添加了更多解释(带有屏幕截图),所以如果您有时间阅读...请看...任何指导将不胜感激... 您是缓存 SQL 查询的结果,还是只缓存加载的数据?你可以尝试不使用 ORDER BY 的查询吗? 首先,数据已经被缓存并且不再被缓存(查询结果),因为我可能不会再次使用这些结果。 第二,我确实从查询中删除了“ORDER BY”,然后计算作业的时间减少了 2 分钟,导致作业在 12 分钟内完成,如果我们将其与普通数据库数据进行比较,这仍然太慢了检索... 正如我在 Spark-UI 中看到的,分区数是 128,这是否意味着每个选择查询都在每个分区上执行,然后采用联合,这会减慢所有数据检索速度?

以上是关于从 Spark Cache VS 数据库中检索数据缓慢的主要内容,如果未能解决你的问题,请参考以下文章

从缓存中删除 spark 数据帧

使用 Apache Shiro 从 session/authenticationtoken/cache 中检索用户信息

Spark HiveContext vs HbaseContext?

spark sql 性能调优

Spark 操作hbase(构建一个支持更新和快速检索的数据库)

从python中cacheout模块的Cache()方法获取数据缓存的时间