Spark mapPartitions:如何避免OOM?

时间:2019-05-13 11:41:57

标签: scala apache-spark cloudera hortonworks-data-platform databricks

我有这样的代码:

.repartition( 10 )
.rdd.mapPartitions(
  it => MyProcessor.process(it)
).count()

重新分区似乎很好(每个分区的行数合理)。

问题是我有OOM,因为应用于每个分区又称为 MyProcessor 的任务都不知道可用内存。每个处理器的用户区缓冲区的确为2GB(因此一个分区一次为2GB),但是它不了解Spark的内存消耗,因此我的假设是它的OOM失败了。

在不增加分区的情况下,两者的相关Spark配置属性是什么:

  • 保留足够的内存以允许每个分区在给定的时间完全位于内存中
  • 留下足够的内存,以允许每个处理器(在mapPartitions闭包内部)完成其工作

这里的问题是Spark和userland之间共享内存。您是否有关于解决该问题的相关Spark选项的想法?谢谢

0 个答案:

没有答案