hadoop linux inode 相關

破棉襖發表於2016-09-19


起因:

近期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部落格 ” ,連結:http://blog.itpub.net/29754888/viewspace-2125149/,如需轉載,請註明出處,否則將追究法律責任。

相關文章