首页 > 大数据 > Hadoop > hadoop linux inode 相关
起因:
近期spark集群执行任务时有stage抛出异常:
java.io.IOException: Failed to create local dir in /mnt/yarn/local/usercache/spark/appcache/application_1472468166282_1672/blockmgr-8e4ecd91-0dca-497a-8b6e-16bcdb89a4b2/31.
at org.apache.spark.storage.DiskBlockManager.getFile(DiskBlockManager.scala:73)
at org.apache.spark.storage.DiskBlockManager.getFile(DiskBlockManager.scala:83)
at org.apache.spark.shuffle.IndexShuffleBlockResolver.getDataFile(IndexShuffleBlockResolver.scala:53)
at org.apache.spark.shuffle.sort.SortShuffleWriter.write(SortShuffleWriter.scala:69)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:73)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:41)
at org.apache.spark.scheduler.Task.run(Task.scala:89)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:227)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
过程:
集群节点硬盘并未占满,但是发现系统inode IUse%达到了100。
删掉一些数据文件后问题得到解决
总结:
创建集群系统时要考虑集群存储的文件类型,hdfs每个块对应系统一个文件。
如果hdfs存储大文件则应该考虑设大系统block大小,使用较大的块会得到更好的性能。
如果hdfs存储小文件则应该考虑设小系统block大小,使用较大的块会造成大量空间浪费,可能还会出现磁盘利用率很低但无法创建文件的现象
补充:
一、block相关:
1、磁盘读取按照block为单位。
2、一个文件可能占用多个block,每读取一个block就会消耗一次磁盘I/O。
3、设大block大小会使大文件block数量减少从而减少磁盘I/O。
4、block并非越大越好,如果文件内容小于block,那剩余空间就会浪费掉
二、inode相关:
1、inode一般默认大小为123字节或256字节
2、假定block大小设为1M,硬盘空间为2T,inodes总量指定方案:
2 * 1024 * 1024 = 2097152M
2097152M / 1M = 2097152(理论磁盘最多存储该数据个文件)
2097152 * 128 / 1024 /1024 = 256(如果inode大小为128字节,则inodes会占用256M磁盘空间)
3、inodes总量受block大小影响
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29754888/viewspace-2125149/ ,如需转载,请注明出处,否则将追究法律责任。