[Spark Q&A]如果中间输出RDD在内存放不下会怎么样?

问:

如果我的中间输出RDD 数据大小是2G,但只有1G 的空闲内存,此时会怎么样?

答:

这个问题其实问的 RDD 缓存机制。我们可以调用 persist()cache()方法来缓存 RDD。Spark 的缓存是具有容错性的,如果 RDD 的任意 partition 丢失,将会自动重算。

依据你设置的 RDD 缓存的 Storage level 的不同,产生的行为也是不同的,如下:

  • MEMORY_ONLY: 调用 cache 和 persist 的默认值,会尽量多的将你的中间输出 RDD 的 partitions 放到内存,其余放不下的 partition 会在使用到的时候进行重算
  • MEMORY_AND_DISK: 会尽量多的将你的中间输出 RDD 的 partitions 放到内存,其余放不下的 partition 会放到磁盘
  • DISK_ONLY: 将所有 partitions 放到磁盘

还有一些 Storage level 无非是序列化或放两份,就不一一展开了。至于缓存 RDD 时需要用哪种 storage level,需要视具体情况而定,有些情况下重算比从磁盘加载还快;有些情况下,为了节省空间可能需要序列化等等


更多不容错过的 Spark Q&A: Spark Q&A 目录

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容