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

SPARK java。lang.OutOfMemoryError:内存不足,无法构建表并将其广播给所有工作节点

闻人花蜂
2023-03-14

我正在使用火花加入我从azure存储和从eventhub获取的流式数据集获取的静态数据集。我没有在任何地方使用广播连接。我在加入后尝试了df.explain(),它显示sortmer连接正在发生。我不确定为什么我会收到与Broadcast Hash连接相关的错误。

java.lang.OutOfMemoryError: Not enough memory to build and broadcast the table to all worker nodes. As a workaround, you can either disable broadcast by setting spark.sql.autoBroadcastJoinThreshold to -1 or increase the spark driver memory by setting spark.driver.memory to a higher value
...
...
Exception in thread "spark-listener-group-shared" java.lang.OutOfMemoryError: Java heap space
...
...

Spark会广播它从活动中心得到的一切吗?

我的程序就是这样的

//##read stream from event hub

process(stream)

def process(stream: DataFrame){

  val firstDataSet = getFirstDataSet()
  firstDataSet.persist()

  val joined = stream.join(
    firstDataSet,
    stream("joinId") === firstDataSet("joinId")
    )

  //##write joined to event hub
}

def getFirstDataSet(){
  //##read first from azure storage

  val firstDataSet = first.filter(
    condition1 &&
    condition 2
    )
}

更新:看起来JVM内存不足错误,与广播无关。https://issues.apache.org/jira/plugins/servlet/mobile#issue/SPARK-24912

看起来char数组正在驱动程序中累积。我不确定是什么原因导致它累积了char数组。

共有1个答案

葛越
2023-03-14

通过在名称中保留所有设置,解决了此问题。https://spark.apache.org/docs/latest/configuration.html#spark-用户界面

或者如果你不需要它,你可以完全禁用火花用户界面。

 类似资料:
  • 我正在尝试编写一个关于HBase表中存在的数据的链接MapReduce作业,需要一些关于这个概念的帮助。我并不期望人们通过伪代码来提供代码,因为基于HBase的Java API会很好。 简单来说,我想做的是,

  • 我是java编程的新手,现在我遇到了处理大文本文件的问题。我正在编写代码来处理整个文件的字符串,将其解析为一个类,在这个类中将其转换为XML。挑战在于我只能处理少于70K行的输出;如果我的内存超过800K,它将抛出一个错误“Java.lang.OutofMemoryError:Java堆空间”。下面是我的示例文件和代码。

  • 我正在尝试设置Bitbucket管道以构建我的应用程序的本机Quarkus图像,但构建失败 原因:java。lang.RuntimeException:映像生成失败。退出代码为137,表示内存不足错误。考虑通过设置“quarkus.native.native image Xmx”属性来增加本机图像生成的Xmx值 我使用两倍的内存(8 GB而不是4 GB)增加了管道的大小,并试图给docker更多内

  • 尝试使用https://github.com/endel/regene-memory-limit增加大小限制,但仍然无法构建。我需要更改node_modules中的任何地方吗? 10%构建模块6/8模块2活动...\bootstrap\dist\css\bootstrap 90%块资产处理<---最后几个GCs---> 174152 ms:标记-扫描1266.2(1435.6)->1265.2(1

  • 问题内容: 首先,我对JNA和Java如何直接本机内存分配的理解充其量只是内在的,因此,我试图描述我对正在发生的事情的理解。除了回应以外的任何更正都会很棒。 我正在运行一个使用JNA混合Java和C本机代码的应用程序,并且遇到了一个可重现的问题,Java垃圾收集器无法释放对直接本机内存分配的引用,导致C堆内存不足。 我很肯定我的C应用程序不是分配问题的根源,因为我将A传递到我的C代码中,修改了缓冲