HDFS文件因Hadoop版本原因导致append操作失败的问题
问题重现: 2023.05.24练习B站尚硅谷Hadoop3里的HDFS的Shell操作(append)
[atguigu@hadoop102 hadoop-3.3.4]$ hadoop fs -appendToFile liubei.txt /sa
点击查看代码
[atguigu@hadoop102 hadoop-3.3.4]$ hadoop fs -appendToFile liubei.txt /sa
2023-05-24 20:30:37,303 WARN hdfs.DataStreamer: DataStreamer Exception
java.io.IOException: Failed to replace a bad datanode on the existing pie to try. (Nodes: current=[DatanodeInfoWithStorage[192.168.10.102:9866,Dinal=[DatanodeInfoWithStorage[192.168.10.102:9866,DS-29fd6973-aa05-439e-ode replacement policy is DEFAULT, and a client may configure this via 'policy' in its configuration.
at org.apache.hadoop.hdfs.DataStreamer.findNewDatanode(DataStrea
at org.apache.hadoop.hdfs.DataStreamer.addDatanode2ExistingPipel
at org.apache.hadoop.hdfs.DataStreamer.handleDatanodeReplacement
at org.apache.hadoop.hdfs.DataStreamer.setupPipelineInternal(Dat
at org.apache.hadoop.hdfs.DataStreamer.setupPipelineForAppendOrR
at org.apache.hadoop.hdfs.DataStreamer.run(DataStreamer.java:717
appendToFile: Failed to replace a bad datanode on the existing pipeline y. (Nodes: current=[DatanodeInfoWithStorage[192.168.10.102:9866,DS-29fd6atanodeInfoWithStorage[192.168.10.102:9866,DS-29fd6973-aa05-439e-ba74-8elacement policy is DEFAULT, and a client may configure this via 'dfs.cli in its configuration.
这个错误表示在执行HDFS的文件复制操作时发生了错误。具体原因是:
- 要复制的文件/wcinput/word.txt不存在1个以上的数据节点可以复制。
- 当前HDFS集群中有0个可用的数据节点,且0个节点被排除在此次操作之外。
导致这个错误的最常见原因是: - 文件word.txt仅存在于一个数据节点上,其它数据节点不具有该文件块的副本,所以无法达到最小副本数minReplication。
- HDFS集群的部分或全部数据节点处于不可用状态,所以无法找到足够的节点来完成文件复制操作。
要解决这个问题,可以从以下几个方面着手: - 检查文件/wcinput/word.txt的副本数是否达到HDFS的默认最小副本数3,如果没有可以手动完成文件复制以达到3个副本。
hdfs fsck /wcinput/word.txt -files -blocks #检查副本数
hdfs fs -cp /wcinput/word.txt /wcinput/word.txt #手动复制文件
2. 检查HDFS集群的数据节点状态,重启处于不可用状态的节点。 - 如果有数据节点发生故障,等待其恢复或替换后重新复制文件。
- 如有必要,可以临时调整HDFS的最小副本数配置,但需要尽快恢复默认配置。
hdfs getConf -namenode srv1.example.com -confKey dfs.namenode.replication.min #获取最小副本数
hdfs setConf -namenode srv1.example.com -confKey dfs.namenode.replication.min -value 2 #临时设置为2
重启服务后 myhadoop.sh stop myhadoop.sh start
报错如下:
[atguigu@hadoop102 hadoop-3.3.4]$ hadoop fs -appendToFile liubei.txt /sa appendToFile: Failed to APPEND_FILE /sanguo/shuguo.txt for DFSClient_NONuse lease recovery is in progress. Try again later.
Claude:
使用-ignoreCrc参数跳过CRC校验。有时CRC校验也会触发短暂的租约恢复过程。
shell
hadoop fs -appendToFile -ignoreCrc liubei.txt /sanguo/shuguo.txt
继续报第一个错误信息,发现DataNode三个挂了俩,本质是hadoop的升级功能需要data-node在它的版本文件里存储一个永久性的clusterID,当datanode启动时会检查并匹配namenode的版本文件里的clusterID,如果两者不匹配,就会出现"Incompatible clusterIDs"的异常.
<查看DataNode状态>
找到参看博客如下:
DataNode 启动失败报错 Incompatible clusterIDs
1.查看DataNode 目录 /opt/module/hadoop-3.3.1/data/dfs/data/current
下的 VERSION
文件中的 clusterID
2.查看 NamaNode 目录 /opt/module/hadoop-3.3.1/data/dfs/name/current
下的 VERSION
文件中的 clusterID.
将启动失败的 DataNode
的 ClusterID 值 修改为 NameNode 的 ClusterID.