HDFS追加データエラーの解決策

今夜、2 つの主なエラーが順番に報告されました。

初め

2022-10-25 21:37:11,901 WARN hdfs.DataStreamer: DataStreamer Exception
java.io.IOException: Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try. (Nodes: current=[DatanodeInfoWithStorage[192.168.88.151:9866,DS-4b3969ed-e679-4990-8d2e-374f24c1955d,DISK]], original=[DatanodeInfoWithStorage[192.168.88.151:9866,DS-4b3969ed-e679-4990-8d2e-374f24c1955d,DISK]]). The current failed datanode replacement policy is DEFAULT, and a client may configure this via 'dfs.client.block.write.replace-datanode-on-failure.policy' in its configuration.
        at org.apache.hadoop.hdfs.DataStreamer.findNewDatanode(DataStreamer.java:1304)
        at org.apache.hadoop.hdfs.DataStreamer.addDatanode2ExistingPipeline(DataStreamer.java:1372)
        at org.apache.hadoop.hdfs.DataStreamer.handleDatanodeReplacement(DataStreamer.java:1598)
        at org.apache.hadoop.hdfs.DataStreamer.setupPipelineInternal(DataStreamer.java:1499)
        at org.apache.hadoop.hdfs.DataStreamer.setupPipelineForAppendOrRecovery(DataStreamer.java:1481)
        at org.apache.hadoop.hdfs.DataStreamer.run(DataStreamer.java:719)
appendToFile: Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try. (Nodes: current=[DatanodeInfoWithStorage[192.168.88.151:9866,DS-4b3969ed-e679-4990-8d2e-374f24c1955d,DISK]], original=[DatanodeInfoWithStorage[192.168.88.151:9866,DS-4b3969ed-e679-4990-8d2e-374f24c1955d,DISK]]). The current failed datanode replacement policy is DEFAULT, and a client may configure this via 'dfs.client.block.write.replace-datanode-on-failure.policy' in its configuration.

これは記事を読んで分かるのですが、書けない、つまり環境内にデータノードが3つある場合、バックアップ数が3に設定されていることを意味します。書き込み時には、パイプライン内の 3 台のマシンに書き込みます。デフォルトの replace-datanode-on-failure.policy は DEFAULT です。システム内のデータノードが 3 以上の場合、コピーする別のデータノードが検索されます。現時点ではマシンが 3 台しかないため、1 つのデータノードに問題がある限り、正常に書き込むことができません。

そのとき、操作中にクラスター内のマシンを 1 台だけオンにしていたので、datanode はクラスター内の番号になるはずですが、1 つしかないため、エラーを報告しました。次に、3 台のマシンすべてで Hadoop を起動すると、うまくいきました。

インターネット上の一般的な方法は、次のように hdfs-core.xml ファイルを変更することです。

<property>
        <name>dfs.support.append</name>
        <value>true</value>
</property>

<property>
        <name>dfs.client.block.write.replace-datanode-on-failure.policy</name>
        <value>NEVER</value>
</property>
<property>
        <name>dfs.client.block.write.replace-datanode-on-failure.enable</name>
        <value>true</value>
</property>

インターネット上のノードへの応答はこのように説明されていますが、2 番目と 3 番目のノードについては、デフォルトの場合の dfs.client.block.write.replace-datanode-on-failure.policy に注目していただけると思います。バックアップが 3 つ以上ある場合は、ノードを交換し、データノードへの書き込みを試行します。2 つのバックアップの場合、データノードは置き換えられず、書き込みが直接開始されます。3 つのデータノードからなるクラスターの場合、1 つのノードが書き込みに応答しない限り問題が発生するため、そのノードをオフにすることができます。

二番目

appendToFile: Failed to APPEND_FILE /2.txt for DFSClient_NONMAPREDUCE_505101511_1 on 192.168.88.151 because this file lease is currently owned by DFSClient_NONMAPREDUCE_-474039103_1 on 192.168.88.151
appendToFile: Failed to APPEND_FILE /2.txt for DFSClient_NONMAPREDUCE_814684116_1 on 192.168.88.151 because lease recovery is in progress. Try again later.

2 つ目は、これら 2 つの文が行ったり来たりしていますが、後で見るとすべてリースであることがわかります。これは問題があるはずで、これはインターネットで言及されているノード応答であるはずです。DFSClient によって所有されていることがわかります。最初の文の後に「後者の IP が最初のマシンなので、私は 1 台のマシンしか開いていないと推定されます。皆さんがそれを開くと、ノードの応答の問題になるはずです。」 これは上記に戻りますので、修正しましょう。正直にファイルします。

おすすめ

転載: blog.csdn.net/weixin_47367099/article/details/127524320