当前位置: 首页 > 知识库问答 >
问题:

并行化步骤中的火花内存错误

李康安
2023-03-14

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

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

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

  • Spark java。lang.OutOfMemoryError:Java堆空间
  • Spark java。lang.OutOfMemoryError:Java堆空间(samthebest列出的可能解决方案也无助于解决此问题)

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

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

共有1个答案

汪弘光
2023-03-14
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 X倍于内核的分区数量将是很好的情况(考虑到每个分区将处理超过几秒钟)

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

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

您可以检查可用于运行大小的执行程序内存和磁盘。

如果您可以指定有关作业的更多详细信息,例如核心数量、执行器内存、执行器数量和可用磁盘,那么指出问题将很有帮助。

 类似资料:
  • 我的spark程序在小数据集上运行良好。(大约400GB)但是当我将其扩展到大型数据集时。我开始得到错误

  • 一些脚本在工作时什么也不做,当我手动运行它们时,其中一个失败了,出现了以下消息: 错误SparkUI:未能绑定SparkUI java.net.bindexception:地址已在使用:服务“SparkUI”在重试16次后失败! 所以我想知道是否有一种特定的方法来并行运行脚本?

  • 我是spark新手,有一个简单的spark应用程序,使用spark SQL/hiveContext: 从hive表中选择数据(10亿行) 做一些过滤,聚合,包括row_number窗口函数来选择第一行,分组,计数()和最大()等。 将结果写入HBase(数亿行) 我提交的作业运行它在纱线集群(100个执行者),它很慢,当我在火花UI中查看DAG可视化时,似乎只有蜂巢表扫描任务并行运行,其余的步骤#

  • 我是Spark的初学者,我正在运行我的应用程序,从文本文件中读取14KB的数据,执行一些转换和操作(收集、收集AsMap),并将数据保存到数据库 我在我的macbook上本地运行它,内存为16G,有8个逻辑核。 Java最大堆设置为12G。 这是我用来运行应用程序的命令。 bin/spark-submit-class com . myapp . application-master local[*

  • IOException:找不到键类'com.test.serializetest.toto'的序列化程序。如果使用自定义序列化,请确保配置“io.serializations”配置正确。在org.apache.hadoop.io.sequenceFile$writer.init(sequenceFile.java:1179)在org.apache.hadoop.io.sequenceFile$wr

  • 希, 由于要运行流程的机器的限制,不得不使用spring Batch1.1,我对配置并行步骤有些怀疑。在较新版本的spring batch中,您可以使用spring batch中的flow package来实现这一点,但该包在1.1版本中不存在。 在spring Batch1.1中,如何在自己的线程中执行不同的步骤?(默认情况下,我理解在作业中配置的步骤是顺序的) 谢谢