浏览 2432 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-02-23
最后修改:2010-04-11
<property> <name>dfs.datanode.du.reserved</name> <value>1024</value> </property> 这样是为了保证每个磁盘写入点能预留1K的空间来,而不是让DN将每个磁盘写入点写满,以导致M/R写local文件是发生磁盘空间不够而失败,甚至启动DN时也有可能失败(DN在启动时会初使化本地临时目录)。但是最近发现,这个配置选项并没有生效,还是有很多DN上的磁盘被写满了。究其代码,就发现了问题: long getCapacity() throws IOException { - if (reserved > usage.getCapacity()) { - return 0; - } - - return usage.getCapacity()-reserved; + long remaining = usage.getCapacity() - reserved; + return remaining > 0 ? remaining : 0; } long getAvailable() throws IOException { long remaining = getCapacity()-getDfsUsed(); - long available = usage.getAvailable(); + long available = usage.getAvailable() - reserved; if (remaining>available) { remaining = available; } return (remaining > 0) ? remaining : 0; } 前一个修改是为了避免getCapacity() 被调用两次,该bug也是hadoop jira的一个close掉的bug。 后一个修改就是该bug所在。在比较remaining和available这两个变量的时候,remaining其实是减过reserved的,但available却没有,这样就导致计算磁盘剩余空间的时候出现问题,所以让available也减一下,这样就合理了。 -HADOOP-0.19.2 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |