返回信息流我用spark的binaryFile读取一个16g的.zip压缩包(解压缩后160G),我分配了28g的executor,结果在binarFile这个job就显示内存不够用了。我想不明白为什么
----------------------------
更新:
我刚才去查了下日志,是一个executor挂掉后被remove,然后加上另一个executor,又Out-of-memory挂掉,又remove,又Out-of-memory挂掉,又remove...
简直是葫芦娃救爷爷,一个一个送啊
错误信息是:
java.lang.OutOfMemoryError
at java.io.ByteArrayOutputStream.hugeCapacity(ByteArrayOutputStream.java:123)
at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:117)
at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:153)
at org.spark_project.guava.io.ByteStreams.copy(ByteStreams.java:211)
at org.spark_project.guava.io.ByteStreams.toByteArray(ByteStreams.java:252)
at org.apache.spark.input.PortableDataStream.toArray(PortableDataStream.scala:193)
at org.apache.spark.api.python.PythonRDD$.org$apache$spark$api$python$PythonRDD$write$1(PythonRDD.scala:216)
at org.apache.spark.api.python.PythonRDD$anonfun$writeIteratorToStream$1.apply(PythonRDD.scala:224)
at org.apache.spark.api.python.PythonRDD$anonfun$writeIteratorToStream$1.apply(PythonRDD.scala:224)
at scala.collection.Iterator$class.foreach(Iterator.scala:891)
at org.apache.spark.InterruptibleIterator.foreach(InterruptibleIterator.scala:28)
at org.apache.spark.api.python.PythonRDD$.writeIteratorToStream(PythonRDD.scala:224)
at org.apache.spark.api.python.PythonRunner$anon$2.writeIteratorToStream(PythonRunner.scala:557)
at org.apache.spark.api.python.BasePythonRunner$WriterThread$anonfun$run$1.apply(PythonRunner.scala:345)
at org.apache.spark.util.Utils$.logUncaughtExceptions(Utils.scala:1990)
at org.apache.spark.api.python.BasePythonRunner$WriterThread.run(PythonRunner.scala:194)
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #36326同步于 2020/3/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖
Spark 的binaryFile 撑爆内存
PMS
2020/3/4镜像同步15 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 SS4G 的大作中提到: 】
: binary file不能像textfile一样被分多个partition吧
对,我操作的是.zip文件,.zip文件不能分partition
【 在 caomxin 的大作中提到: 】
: 分配的28g executor真的有28g内存吗 也可能是配置问题?
当然不是,最后落到 执行内存 + 存储内存的,只是整个executor内存的一部分
【 在 qpegasus 的大作中提到: 】
: 既然不能分块,可能读取是在一个executor上进行的。
我也怀疑是只在一个executor上执行,但报错时四个executor都报了内存不足的错误
贴个log瞅瞅
【 在 PMS (PMS) 的大作中提到: 】
: 我也怀疑是只在一个executor上执行,但报错时四个executor都报了内存不足的错误