【问题标题】:apache-spark-Cache table in Memory is spilling over to disk内存中的 apache-spark-Cache 表溢出到磁盘
【发布时间】:2019-10-17 04:12:42
【问题描述】:

如何将表固定在缓存中,这样它就不会换出内存?

情况:我们正在使用Microstrategy BI 报告。构建语义层。我们想使用 Spark SQL CACHE Table 将频繁使用的表缓存到 CACHE 中;我们为 SPARK 上下文(Thrift 服务器)做了缓存。最初它都在缓存中,现在一些在缓存中,一些在磁盘中。该磁盘可能是本地磁盘,读取成本比从 s3 读取的成本更高。从用户体验的角度来看,查询可能需要更长且不一致的时间。如果使用缓存表运行更多查询,则会复制缓存表图像的副本,并且副本不会保留在内存中,从而导致报告运行时间更长。所以如何固定表,这样就不会交换到磁盘。 Spark内存管理是动态分配的,如何利用那几张表Pin到内存中。

【问题讨论】:

    标签: apache-spark caching


    【解决方案1】:

    有几种不同的方法可以解决这个问题。首先请记住,内存存储在存储和执行之间共享。所以做可能需要临时存储的大连接/等可能会争夺内存空间。您可能想查看当前默认为 0.5 的“spark.memory.storageFraction” 考虑 0.75 但这可能会减慢您的查询速度。还要考虑对问题应用良好的数据工程。减少需要存储的数据量。创建一个临时视图,删除旧记录并修剪不需要的列,然后缓存它。考虑使用较小的数据类型来改进存储。 Ex int 比大字符串更节省空间。最后考虑切换到具有更多可用内存的实例类型或切换到具有快速本地磁盘的实例。在某些情况下,磁盘存储并不比内存慢多少。如果您在集群受 cpu 限制而非 io 限制的情况下运行大型复杂分析查询,则尤其如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 2014-05-09
      • 2021-06-15
      • 2012-01-31
      • 2016-12-20
      • 2015-05-29
      • 1970-01-01
      相关资源
      最近更新 更多