【问题标题】:How do I figure out the size of specific RDDs in the cache?如何计算缓存中特定 RDD 的大小?
【发布时间】:2017-11-21 06:09:54
【问题描述】:

我经常处理因超出内存限制而被 YARN 杀死的容器。我怀疑这与以低效的方式缓存/取消持久化 RDDS/数据帧有关。

调试此类问题的最佳方法是什么?

我查看了 Spark Web UI 中的“存储”选项卡,但“RDD 名称”没有比“MapPartitionsRDD”或“UnionRDD”更具描述性。如何确定哪些特定 RDD 在缓存中占用的空间最多?

为了找出内存不足错误,我需要找出哪些 RDD 在缓存中占用的空间最多。我还希望能够跟踪它们何时不持久。

【问题讨论】:

    标签: apache-spark


    【解决方案1】:
    • 对于RDDs,您可以使用setName 方法设置有意义的名称:

      val rdd: RDD[T] = ???
      rdd.setName("foo")
      
    • 对于catalog 支持的表:

      val df: DataFrame = ???
      df.createOrReplaceTempView("foo")
      spark.catalog.cacheTable("foo")
      

      目录中的名称将同时反映在 UI 和 SparkContext.getPersistentRDD 中。

    • 我不知道任何适用于独立 Datasets 的解决方案。

    【讨论】:

    • 谢谢!有没有一种好方法可以确定 RDD 何时未被持久化?还是你基本上必须不断刷新页面?
    猜你喜欢
    • 2018-09-26
    • 2015-05-14
    • 2019-07-08
    • 2020-07-14
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 2011-11-08
    • 2021-01-24
    相关资源
    最近更新 更多