筆者的hadoop在不間斷的寫文件的過程當中報了以下錯誤 node
經查看發現是hadoop所在服務器的磁盤空間不足致使的。
好了,知道問題後筆者須要配置相關參數來避免該問題
一、與mapred.local.dir相關的參數
* mapred.local.dir.minspacestart:在mapreduce運行任務以前,檢查temporary 目錄下是否還有該選項配置的空閒空間,若是少於該配置,則map或reduce task不會分配到該TaskTracker上,以免因爲磁盤空間不足致使的task失敗。默認設置爲0,disable該功能
* mapred.local.dir.minspacekill:若是該磁盤卷下剩餘的磁盤空間不足該配置,則將正在運行的Task 殺掉。默認爲0,diabled該功能
另,若是服務器有多個塊設備最好將mapred.local.dir設置成多個目錄,每一個目錄對應一個塊設備,這樣多個task在同一個TaskTracker上運行的時候,就能夠分別寫不一樣的磁盤寫入點,以增大做業運行的磁盤吞吐率。
二、與dfs.data.dir相關的參數
* dfs.datanode.du.reserved:dfs寫文件塊時,若是當前datanode上的dfs.data.dir下剩餘磁盤空間不足該選項配置的空間大小,就不往該datanode繼續寫數據塊
* dfs.datanode.du.pct:同dfs.datanode.du.reserved,不過配置值爲一個百分比
最好預留些空間,避免寫文件失敗。
三、建議配額
mapred.local.dir.minspacestart = slots * dfs.block.size
mapred.local.dir.minspacekill = slots/2 * dfs.block.size
dfs.datanode.du.reserved = dfs.block.size * dfs.replication #最少留這麼多吧,建議留大些。
根據需求,筆者在hdfs-site.xml中配置了 linux
<property> <name>dfs.datanode.du.reserved</name> <value>209715200</value> </property>
參考資料:
http://www.linuxidc.com/Linux/2012-11/74478.htm 服務器