在Hadoop中申请一个Flink的Session会话的时候出现了报错
报错内容
File /user/.flink/application_1723473994699_0002b/flink-table-api-java-uber-1.17.0.jar could only be written to 0 of the 1 minReplication nodes. There are 0 datanode(s) running and 0 node(s) are excluded in this operation.
看到说没有找到datanode,然后我就去检查了一下进程,发现确实没有看到datanode,在使用start-dfs.sh的时候,datanode没有启动
可以通过以下来排查一下问题的原因
hdfs-site.xml
和 core-site.xml
文件中的配置是正确的。特别是与 DataNode 相关的配置,如 dfs.datanode.data.dir
(DataNode 存储数据的目录)。dfs.datanode.data.dir
配置)必须存在且可写。如果目录不存在或没有写权限,DataNode 将无法启动。jps
命令查看 NameNode 进程是否正在运行。stop-dfs.sh
和 start-dfs.sh
)。/var/log/syslog/var/log/messages
或类似文件),以查找可能与 Hadoop 进程相关的错误或警告。我去检查了一下namenode跟datanode的clusterID是否一致,发现两者确实不一样
namenode
clusterID=CID-c31bfe11-654c-4b08-a555-22de9305b6dd
datanode
clusterID=CID-b4ac40db-530a-4b2d-8278-0bfe8b91de28
clusterID
会不一样?clusterID
不一致通常发生在以下几种情况:
hdfs namenode -format
命令),而DataNode没有被相应地重置或格式化,那么NameNode将获得一个新的clusterID
,而DataNode仍然保留旧的clusterID
。
clusterID
不匹配),那么也会出现clusterID
不一致的情况。
clusterID
不一致。
clusterID
不一致的后果当NameNode和DataNode的clusterID
不一致时,DataNode将无法与NameNode成功通信或注册自己为集群的一部分。这会导致以下后果:
clusterID
不匹配而失败,这可能导致集群状态不稳定或DataNode频繁重启。clusterID
不一致的问题clusterID
匹配),则可以从该备份恢复NameNode。
clusterID
:在某些情况下,如果确信DataNode属于当前集群,但仅由于某种原因clusterID
不匹配,可以尝试手动更改DataNode的clusterID
以与NameNode的clusterID
相匹配。然而,这种方法需要谨慎操作,并且可能涉及对HDFS内部结构的直接修改。
clusterID
不一致的配置错误或操作失误。
总之,clusterID
不一致是HDFS集群中一个严重的问题,需要仔细诊断和解决。在大多数情况下,最好的做法是避免重新格式化NameNode,除非确实需要重置整个集群。
最好的解决方案还是最好手动修改一下DataNode的clusterID,修改成跟NameNode一致
首先找到VERSION文件,NameNode跟DataNode都有自己的VERSON文件,里面存放着clusterID,但是Hadoop版本的不同,二者存放的路径也不相同
这里建议大家直接使用搜索功能就好了,方便快捷
首先进入到Hadoop目录下,使用find在Hadoop目录下以及其子目录下寻找VERSION
find -name VERSION
我这里找到了三个
./data/dfs/data/current/VERSION
./data/dfs/data/current/BP-1238583945-192.168.10.102-1709627934929/current/VERSION
./data/dfs/name/current/VERSION
第一个可以看到是在data目录下,那么就是datanode的VERSION文件了
第二个应该是一个映射文件,就先不去管它
第三个可以看到是在name目录下,那么就是namenode的VERSION文件了
首先关闭hdfs
stop-dfs.sh
然后检查namenode跟datanode中两个VERSION文件中的clusterID是否一致,如果不一致的话,手动修改DataNode中的clusterID,修改成跟namenode一样的就可以了
然后启动hdfs
start-dfs.sh
DataNode已经正常启动