我有一个 3 节点 hadoop 设置,复制因子为 2。
当我的一个数据节点死亡时,namenode 会等待 10 分钟,然后再将其从活动节点中删除。直到那时我的 hdfs 写入失败,说来自节点的错误 ack。
有没有办法设置一个较小的超时时间(比如 1 分钟),以便立即丢弃 datanode 死亡的节点?
在hdfs-site.xml中设置以下内容将为您提供 1 分钟的超时时间。
<property>
<name>heartbeat.recheck.interval</name>
<value>15</value>
<description>Determines datanode heartbeat interval in seconds</description>
</property>
如果上述方法不起作用 - 请尝试以下操作(似乎取决于版本):
<property>
<name>dfs.heartbeat.recheck.interval</name>
<value>15</value>
<description>Determines datanode heartbeat interval in seconds.</description>
</property>
超时等于 2 * heartbeat.recheck.interval + 10 * heartbeat.interval。heartbeat.interval的默认值为 3 秒。
我已经成功地完成了这项工作。我正在使用 Hadoop 版本 0.2.2。
这是我添加到 hdfs-site.xml 中的内容:
<property>
<name>dfs.heartbeat.interval</name>
<value>2</value>
<description>Determines datanode heartbeat interval in seconds.</description>
</property>
<property>
<name>dfs.heartbeat.recheck.interval</name>
<value>1</value>
<description>Determines when machines are marked dead</description>
</property>
对于其他版本的 Hadoop,此参数可能会有所不同。以下是如何检查您是否使用了正确的参数:设置它们后,启动您的 master,并检查以下位置的配置:
http://your_master_machine:19888/conf
如果您在那里没有找到“dfs.heartbeat.interval”和/或“dfs.heartbeat.recheck.interval”,这意味着您应该尝试使用没有“dfs”的版本。字首:
“heartbeat.interval”和“heartbeat.recheck.interval”
最后,要检查死数据节点是否在所需时间后不再使用,请杀死一个数据节点,然后重复检查控制台:
http://your_master_machine:50070
对我来说,使用此处显示的配置,我可以看到死数据节点在大约 20 秒后被删除。
在我们使用的 Hadoop 版本中,dfs.heartbeat.recheck.interval 应该以毫秒为单位指定(检查您的 Hadoop 版本的代码/文档,以验证这一点)。