gpt4 book ai didi

hadoop - 在 pyspark 数据帧计数函数中得到 `java.nio.BufferOverflowException`

转载 作者:可可西里 更新时间:2023-11-01 16:40:30 24 4
gpt4 key购买 nike

我正在使用以下环境:spark = 2.0.0,hdp = 2.5.3.0,python = 2.7, yarn 客户端

我的 PySpark 代码大部分时间都运行良好。
但是有时我在 df.count() 函数

中遇到异常

适合我的代码:

df= spark.read.orc("${path}")
df.count()

出现异常的代码:

df= spark.read.orc("${path}")
df = df.cache()
df.count()

堆栈跟踪:

  Job aborted due to stage failure: Task 0 in stage 4.0 failed 4 times, most recent failure: Lost task 0.3 in stage 4.0 (TID 9, apii): java.nio.BufferOverflowException +details
Job aborted due to stage failure: Task 0 in stage 4.0 failed 4 times, most recent failure: Lost task 0.3 in stage 4.0 (TID 9, apii): java.nio.BufferOverflowException
at java.nio.Buffer.nextPutIndex(Buffer.java:521)
at java.nio.HeapByteBuffer.put(HeapByteBuffer.java:169)
at org.apache.spark.sql.execution.columnar.BOOLEAN$.append(ColumnType.scala:286)
at org.apache.spark.sql.execution.columnar.compression.RunLengthEncoding$Encoder.compress(compressionSchemes.scala:143)
at org.apache.spark.sql.execution.columnar.compression.CompressibleColumnBuilder$class.build(CompressibleColumnBuilder.scala:103)
at org.apache.spark.sql.execution.columnar.NativeColumnBuilder.build(ColumnBuilder.scala:97)

感谢任何帮助:)

最佳答案

当在 RDD/dataframe 上使用 cache() 时,分配给 cached RDD 的内存是从执行器内存中获取的。

即如果执行器内存为 8GB,而 缓存的 RDD 的大小为 3GB,则执行器将只有 5GB 的 RAM(而不是 8GB),这可能会导致 缓冲区溢出您面临的问题。

我猜想增加分配给每个执行程序的 RAM 和/或增加执行程序的数量(通常同时增加分区数量)可能会导致 缓冲区溢出 错误消失。

spark-architecture内存管理 部分的简短引用:

执行内存

  • 存储任务执行期间所需的数据
  • 洗牌相关数据

存储内存

  • 缓存 RDD 和广播变量的存储
  • 可能从执行内存中借用(否则溢出)
  • 当缓存 block 不受驱逐时,保护值是 Spark 内存的 50%

关于hadoop - 在 pyspark 数据帧计数函数中得到 `java.nio.BufferOverflowException`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41742280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com