Spark - 设备错误没有剩余空间

时间:2016-05-03 10:18:05

标签: unix apache-spark

我收到以下错误。 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

的inode     df -i / var / log / hadoop / spark     文件系统Inode IUsed IFree IUse%已安装     / dev / mapper / meta 209711104 185 209710919 1%/ var / log / hadoop

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

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

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

所以尝试设置该配置。

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

running spark on yarn

上甚至有一整节