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

如何克服火花spark.kryoserializer.buffer.max2g限制?

申屠项明
2023-03-14

我正在使用spark 2.4.2读取包含600条记录的csv。最后100条记录有大量数据。我遇到的问题是,

ERROR Job aborted due to stage failure: 
Task 1 in stage 0.0 failed 4 times, most recent failure: 
Lost task 1.3 in stage 0.0 (TID 5, 10.244.5.133, executor 3): 
org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow. Available: 0, required: 47094. 
To avoid this, increase spark.kryoserializer.buffer.max value.

我已经增加了spark.kryoserializer.buffer.max到2g(最大允许设置)和火花驱动程序内存到1g,能够处理更多的记录,但仍然不能处理csv中的所有记录。

我试着翻页600条记录。e、 对于6个分区,我可以在每个分区处理100条记录,但由于最后100条记录太多,因此会发生缓冲区溢出。

在这种情况下,最后100条记录很大,但这可能是前100条或300到400条之间的记录。除非我事先对数据进行采样以了解偏差,否则我无法优化处理方法

有没有火花的原因。kryoserializer。缓冲器最大值不允许超过2g。

我可以增加分区并减少每个分区读取的记录吗?可以使用压缩吗?

欣赏任何想法。

共有2个答案

皇甫礼骞
2023-03-14

你在那些记录中有什么记录,一个记录会破坏kryo缓冲区。通常,将分区保留为默认值200应该是一个很好的起点。不要把它减少到6。

看起来一条记录(行)打破了限制。在csv数据中读取有许多选项,您可以尝试csv选项如果有一行转换为2GB缓冲区溢出,我会考虑以不同的方式解析文件。如果您给它一个模式,csv阅读器也会忽略/跳过文件中的一些文本(没有序列化)。如果您从模式中删除一些非常大的列,它可能会很容易地读取数据。

陶修洁
2023-03-14

Kryo缓冲区由字节数组支持,而基元数组的大小只能达到2GB。

有关更多详细信息,请参阅以下链接。https://github.com/apache/spark/commit/49d2ec63eccec8a3a78b15b583c36f84310fc6f0

请增加分区号,因为您无法优化处理方法。

 类似资料:
  • 我有一个XML存储在CLOB中。为了显示来自XML的特定数据,我需要运行各种substr和instr函数。 我当前的代码使用varchar2(32000)变量处理它,如下所示: 我编写了一个匿名块来测试子字符串的限制,如下所示: 我注释掉了第二个子字符串,只是为了看看如果我将str_length更改为32000以下,表是否会填充数据,并且它确实被填充了。 这是我的输出 下面是我的输出:

  • 问题内容: 我知道XHTML不支持嵌套的表单标记,但是我仍然没有找到解决该问题的优雅方法。 有人说您不需要它,并且他们无法想到是否需要这样做。嗯,我个人不认为一个场景,我的 没有 需要它。 让我们看一个非常简单的例子: 您正在制作一个博客应用程序,您有一个表单,其中包含一些用于创建新帖子的字段以及一个带有“操作”(如“保存”,“删除”,“取消”)的工具栏。 我们的目标是以 不需要JavaScrip

  • 问题内容: 我正在使用扫描仪的方法读取文本文件行。但是,当我在文件行中达到一定大小时,扫描仪不再允许我读取它,而是返回一个空行。 我应该如何配置缓冲区以接收大量数据? 只是一个文件,行中有许多整数,并用空格分隔。例如,一行中有40000个整数。(请注意,它适用于小于或等于10000整数的文件行,但不适用于40000) 234 544 765 45 34 67 67 87 98 43 [… n =

  • 您好,我正在尝试在构建中下载,,,以及。sbt文件如下: 我只是把这个联机,所以我不确定使用哪个版本等。 有人能向我解释一下我应该如何修复这个. sbt文件吗?我花了几个小时试图弄清楚,但没有一个建议奏效。我安装了通过家酿和我的版本 我所有的错误都是关于:

  • 在spark streaming中,流数据将由在worker上运行的接收器接收。数据将被周期性地推入数据块中,接收者将向驱动程序发送receivedBlockInfo。我想知道这会引发流将块分发到集群吗?(换句话说,它会使用分发存储策略吗)。如果它不在集群中分发数据,如何保证工作负载平衡?(我们有一个10s节点的集群,但只有几个接收器)

  • 在PySpark中或者至少在Scala中,Apache Spark中是否有与Pandas Melt函数等价的函数? 到目前为止,我一直在用Python运行一个示例数据集,现在我想对整个数据集使用Spark。