并行化步骤中的Spark内存错误

时间:2019-07-15 11:27:31

标签: python docker apache-spark pyspark out-of-memory

我们正在使用最新的Spark版本。作为输入,我们有非常大的元组列表(800 Mio.)。我们使用具有主节点和多个工作节点的docker容器运行Pyspark程序。驱动程序用于运行程序并连接到主机。

在运行程序时,在sc.parallelize(tuplelist)行处,该程序要么退出并显示Java堆错误消息,要么退出而没有任何错误。我们不使用任何Hadoop HDFS层,也没有使用YARN。

到目前为止,我们已经考虑了这些SO帖子中提到的可能因素:

在这一点上,我们有以下问题:

  • 我们如何知道sc.parallelize步骤应使用多少个分区?好的经验法则是什么?
  • 您知道任何(常见的)错误可能会导致观察到的行为吗?

1 个答案:

答案 0 :(得分:1)

How do we know how many partitions we should use for the sc.parallelize step? What is here a good rule-of-thumb?

答案:有很多因素决定分区的数量。

1)在某些情况下,具有3-4倍核心数量的分区数将是一个很好的情况(考虑到每个分区要处理几秒钟以上)

2)分区不能太小或太大(128MB或256MB)就足够了

Do you know any (common?) mistake which may lead to the observed behevior?

可以检查执行程序的执行器内存和磁盘大小吗?

如果您可以指定有关作业的更多详细信息,例如内核数量,执行程序内存,执行程序数量和可用磁盘数量将有助于指出问题。