zoukankan      html  css  js  c++  java
  • dfs.datanode.du.reserved 预留空间不生效的问题

    生产环境(cdh5.5.1)遇到一个问题:已经设置 dfs.datanode.du.reserved预留空间为20G,但是磁盘仍然被写满了。

    当挂载磁盘作为datanode的存储空间,如果磁盘大小为2000G,

    使用df -h 显示:总磁盘大小2000G,使用1930G,剩余40G,就会发现:2000G -(1930G+40G)= 30G,还差了30G空间。

    就是因为这30G空间的问题导致你磁盘写满,如果你配置datanode hdfs-site.xml里的dfs.datanode.du.reserved小于30G的话,而我们设置的是20G,所以磁盘就被写满 了,预留空间就没有起到实际作用

    [解决办法]

    就是设置hadoop dfs.datanode.du.reserved的值 = 总磁盘大小 - (使用的空间 + 剩余空间 )+ 设置的预留空间。

    比如: 
    在上面的基础上你设置预留空间为20G,那么dfs.datanode.du.reserved就可以设置为: 
    2000G -(1930G + 40G) + 20G = 50G。


    终其DataNode代码,发现应该是这样:

    1. long getAvailable() throws IOException {  
    2.        long remaining = getCapacity()-getDfsUsed();  
    3. -      long available = usage.getAvailable();  
    4. +      long available = usage.getAvailable() - reserved;  
    5.        if (remaining>available) {  
    6.          remaining = available;  
    7.        }  
    8.       return (remaining > 0) ? remaining : 0;  
    9. }

  • 相关阅读:
    常见的五种App开发模式
    iOS提供的实用的属性和方法
    iOS开发思想
    iOS函数式编程
    iOS链式编程范例
    ios不起眼的错误
    iOS将汉字转成拼音
    ReactiveCocoa
    LuaViewSDK
    pycharm配置qtdesigner
  • 原文地址:https://www.cnblogs.com/dailidong/p/7571081.html
Copyright © 2011-2022 走看看