レプリケーション係数が 2 の 3 ノード Hadoop セットアップがあります。
データノードの 1 つが停止すると、namenode は 10 分間待機してからライブ ノードから削除します。それまでは、hdfs 書き込みはノードからの悪い ack を言って失敗します。
データノードが停止したノードがすぐに破棄されるように、より短いタイムアウト (1 分など) を設定する方法はありますか?
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 の他のバージョンでは異なる場合があります。正しいパラメーターを使用していることを確認する方法は次のとおりです。パラメーターを設定したら、マスターを起動し、次の場所で構成を確認します。
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 秒後に無効なデータノードが削除されることがわかります。