【问题标题】:Spark - No Space Left on device errorSpark - 设备上没有剩余空间错误
【发布时间】:2021-09-01 16:46:17
【问题描述】:

我收到以下错误。 Spark_local_dir 已设置并有足够的空间和 inode 剩余。

 java.io.IOException: No space left on device
        at java.io.FileOutputStream.writeBytes(Native Method)
        at java.io.FileOutputStream.write(FileOutputStream.java:326)
        at org.apache.spark.storage.TimeTrackingOutputStream.write(TimeTrackingOutputStream.java:58)
        at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
        at java.io.BufferedOutputStream.write(BufferedOutputStream.java:126)
        at org.xerial.snappy.SnappyOutputStream.dumpOutput(SnappyOutputStream.java:294)
        at org.xerial.snappy.SnappyOutputStream.compressInput(SnappyOutputStream.java:306)
        at org.xerial.snappy.SnappyOutputStream.rawWrite(SnappyOutputStream.java:245)
        at org.xerial.snappy.SnappyOutputStream.write(SnappyOutputStream.java:107)
        at org.apache.spark.io.SnappyOutputStreamWrapper.write(CompressionCodec.scala:190)
        at org.apache.spark.storage.DiskBlockObjectWriter.write(BlockObjectWriter.scala:218)
        at org.apache.spark.util.collection.ChainedBuffer.read(ChainedBuffer.scala:56)
        at org.apache.spark.util.collection.PartitionedSerializedPairBuffer$$anon$2.writeNext(PartitionedSerializedPairBuffer.scala:137)
        at org.apache.spark.util.collection.ExternalSorter.writePartitionedFile(ExternalSorter.scala:757)
        at org.apache.spark.shuffle.sort.SortShuffleWriter.write(SortShuffleWriter.scala:70)
        at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:70)
        at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:41)
        at org.apache.spark.scheduler.Task.run(Task.scala:70)
        at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:213)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)


cat spark-env.sh |grep -i local
export SPARK_LOCAL_DIRS=/var/log/hadoop/spark

磁盘使用情况 df -h /var/log/hadoop/spark 已使用的文件系统大小可用使用百分比已安装在 /dev/mapper/meta 200G 1.1G 199G 1% /var/log/hadoop

节点 df -i /var/log/hadoop/spark 文件系统 Inodes IUsed IFree IUse% Mounted on /dev/mapper/meta 209711104 185 209710919 1% /var/log/hadoop

【问题讨论】:

  • 这意味着它正在写你意想不到的地方。
  • 或者某些临时空间已满。查看其他文件系统以查看是否接近容量。或者你写的数据比你预期的要多。
  • "并且有足够的空间" 显然它没有 :-) 你需要向我们展示你的配置,你到底在做什么以及有多少数据。
  • 假设您在 Unix 上运行:请执行“df -h”并提供命令的输出。
  • 配置和磁盘使用详情已添加到问题中。 @Peter,即使我怀疑数据是写在我没想到的地方,需要知道它在哪里。任何对此有所了解的人都会挽救生命

标签: unix apache-spark


【解决方案1】:

我也遇到了同样的问题。为了解决这个问题,我首先通过运行hdfs dfsadmin -report 检查了我的 hdfs 磁盘使用情况。

Non DFS Used 列大于 250 GB。这意味着我的日志或 tmp 或中间数据占用了太多空间。

root 文件夹运行du -lh | grep G 后,我发现spark/work 消耗了超过200 GB。

查看spark/work 中的文件夹后,我了解到我错误地忘记取消注释System.out.println 语句,因此日志占用了大量空间。

【讨论】:

    【解决方案2】:

    如果您在yarn-cluster 模式下运行 YARN,则 Spark 执行器和驱动程序使用的本地目录将从 YARN 配置 (yarn.nodemanager.local-dirs) 中获取。 spark.local.dir 并且您的环境变量将被忽略。

    如果您在yarn-client 模式下运行 YARN,则执行程序将再次使用在 YARN 配置中配置的本地目录,但驱动程序将使用您在 env 变量中指定的目录,因为在该模式下驱动程序不是在 YARN 集群上运行。

    所以尝试设置该配置。

    您可以找到更多信息in the documentation

    running spark on yarn 甚至还有一整节

    【讨论】:

      【解决方案3】:

      请检查 hadoop 使用了多少 inode。如果它们都消失了,一般错误将是相同的,没有剩余空间,而仍然有空间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-16
        • 1970-01-01
        • 1970-01-01
        • 2018-06-29
        • 2017-05-06
        • 1970-01-01
        • 2021-06-16
        • 2019-02-20
        相关资源
        最近更新 更多