【问题标题】:Spark: out of memory exception caused by groupbykey operationSpark:groupbykey操作导致的内存不足异常
【发布时间】:2014-09-07 10:58:15
【问题描述】:

我有一个大文件,其中每一行都是以 id 作为键的记录。

val lines = fileRdd.map(line => (line.id, line))

然后我按 id 对行进行分组

val groupedLines = lines.groupByKey()

因此具有相同 id 的行将被洗牌到一个工作节点。 RDD groupedLines 中的元组就像 id -> 可迭代(line1, line2, ..., lineN) 如果很多行的 id 相同,那么元组的值 Iterable(...) 的大小会很大,如果更大,则表示机器上进程的 JVM 内存限制,可能会出现内存不足的问题。

那么是否存在这个问题,如果是的话,有人知道如何处理这种情况,分组 RDD 中元组的值太大了吗? 我们可以使用 sc.parallelize(t._2.toSeq) 将元组的值更改为另一个嵌套 RDD,例如 RDD[(id,RDD)]

谢谢:P

【问题讨论】:

  • 尝试将 spark.shuffle.consolidateFiles 配置参数设置为 true 并将 spark.storage.memoryFraction 设置为 0。另外请列出一些指标 - 文件大小、集群中的内存量。
  • 你能指定文件大小你的 RAM 大小和 sparkConf 吗?使用单节点对吗?

标签: apache-spark


【解决方案1】:

您可能需要将spark.executor.memory 增加到一个大于您当前使用的值的值。推荐5g

您能否提供此类错误的堆栈跟踪?

【讨论】:

    【解决方案2】:

    def groupByKey(numPartitions: Int): RDD[(K, Seq[V])]

    尝试增加参数

    numPartitions
    

    【讨论】:

      猜你喜欢
      • 2012-12-15
      • 2011-05-26
      • 2013-06-22
      • 2013-12-09
      • 1970-01-01
      • 2014-03-11
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      相关资源
      最近更新 更多