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

标签 hadoop apache-spark pyspark hadoop-yarn

我正在使用以下环境: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/

相关文章:

hadoop - 数据节点和节点管理器出现在吉普车中,但无法正确启动

python - 分区数如何影响 `wholeTextFiles` 和 `textFiles` ?

python - 如何使用 withcolumn 方法和基于多个条件的过滤器?

matrix - Pyspark:按列加权平均

python - 如何从 Spark SQL 中的列表创建数据框?

apache-spark - JDBC 连接处带有空格的表名会出现错误

hadoop - AWS EC2 - Cloudera Manager - 停止实例

hadoop - Hadoop的哪种分布更好?

java - Apache sqoop未编译

scala - 当案例类字段是带反引号的保留 java 关键字时,spark-submit 失败