首页 > 解决方案 > 如何在不导致 Hadoop 进入安全模式的情况下限制 DataNode 上的磁盘使用?

问题描述

我有 3 个节点 Hadoop 2.7.3 集群,可以描述如下:

问题是节点A上的磁盘使用率很高(大约 95%)。我想要实现的是限制磁盘使用率,使其永远不会超过 85%。
我尝试将dfs.namenode.resource.du.reserved属性设置为大约 3gb,但这并不能解决我的问题,因为一旦可用磁盘空间低于该值,我的 Hadoop 就会立即进入安全模式。
我知道,NN 必须提供所有必需的资源才能继续运行,并且只要有任何冗余资源可用,NN 就会继续运行。
另外,我知道dfs.namenode.edits.dir.required定义所需资源的属性,但我不认为使 NN 冗余而不是必需是一个好主意。

所以我的问题与主题相同。我怎么能对 Hadoop 说:“嘿,听着。这是一个数据节点,把你想要的任何东西放在这里,但是如果磁盘使用率高于 85%,那么不要惊慌——停止在这里放任何东西,继续做你的事情在 DN 的其余部分。”?
我错过了什么吗?甚至可能吗?如果没有,那么你们会建议我做什么?

标签: hadoop

解决方案


有一个名为 Namenode 资源检查器的进程,它扫描 Namenode 存储卷以查找可用的可用磁盘空间。只要可用空间低于dfs.namenode.resource.du.reserved属性中指定的值(默认为 100MB),它就会强制 Namenode 进入安全模式。

将其设置为3GB将期望此节点上有可用空间。但是,不考虑 Namenode 的磁盘空间要求,Datanode 将消耗所有可用空间用于其数据存储。

限制datanode在这个特定节点上的磁盘使用,将此属性添加到hdfs-site.xml

<property>
  <name>dfs.datanode.du.reserved</name>
  <value>3221225472</value>
  <description>3GB of disk space reserved for non DFS usage. 
               This space will be left unconsumed by the Datanode.
     </description>
</property>

根据您所需的阈值更改预留空间值。


推荐阅读