【问题标题】:Spark Memory Error at Parallelization Step并行化步骤中的 Spark 内存错误
【发布时间】:2019-07-15 11:27:31
【问题描述】:

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

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

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

此时我们有以下问题:

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

【问题讨论】:

  • 我个人将 scala 与 spark 一起使用,但我参加了一个数据工作会议,他们谈到 pyspark 的主要问题是如果我没记错的话,python 内存存在于 java 堆中,并且当你使用python 你应该知道你的内存消耗并正确设置配置。我不确定,但对我来说,错误似乎与分区数量或类似的东西无关,但错误源在您使用的配置中。

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


【解决方案1】:
How do we know how many partitions we should use for the sc.parallelize step? What is here a good rule-of-thumb?

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

1) 在某些情况下,分区数可能是核心数的 3-4 倍(考虑到每个分区的处理时间超过几秒)

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

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

你能检查一下执行器内存和可用于运行的磁盘大小吗?

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

【讨论】:

  • 我们使用以下配置运行 Spark 作业:/spark/bin/spark-submit --master spark://spark-master:7077 --driver-memory 5g --executor-memory 7g --py-files path/to/file.py 2 20 0.5 "./data/40k_test.csv" 所以Driver内存是5GB,executor内存是7GB。工作人员在 Docker-compose.yml 中有 2 个 cpu 和 2GB 的内存预留和 mem_limit。感谢您的帮助!
  • 我没有看到内存分配有任何问题,可能看看代码,什么样的机器(标准 2 或标准 4 .....)以及 yaml文件可能会更好地了解问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-04
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 2018-08-01
  • 2017-08-24
  • 2014-09-26
相关资源
最近更新 更多