`
david.org
  • 浏览: 155071 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hadoop FSDataset中,dfs.datanode.du.reserved 参数选项之BUG

阅读更多
在DN的hadoop-site.xml中配置了选项:
<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
分享到:
评论
3 楼 xuxm2007 2012-07-04  
david.org 写道
xuxm2007 写道
你使用的版本是0.19.2吗?
这样修复之后起到效果吗?


目前高版本这个bug早改掉了吧。


好像有的版本还没有,
我在看的hadoop-0.20.2-cdh3u0没有
2 楼 david.org 2012-06-07  
xuxm2007 写道
你使用的版本是0.19.2吗?
这样修复之后起到效果吗?


目前高版本这个bug早改掉了吧。
1 楼 xuxm2007 2012-06-07  
你使用的版本是0.19.2吗?
这样修复之后起到效果吗?

相关推荐

Global site tag (gtag.js) - Google Analytics