原因是多次 hadoop namenode -format 导致 datanode 的version 里的Cluster-Id 不一致
这个Cluster-Id的位置在: 自己设置的数据临时文件/dfs/name(如果是datanode就是data)/name/current里的VERSION文件
如我的在 hdpdata//home/hadoop/hdpdata/dfs/name/current。如果不知道可以去hadoop/etc/hadoop/core-site.xml 里找。
#core-site.xml文件
<!-- 指定hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/hdpdata</value> </property>
解决办法是把所有节点(包括namenode和datanode)的这个临时文件夹删除,然后 namenode节点,重新hadoop namenode -format, 再start-all.sh.就可以了,临时文件夹会自动重新生成,这时候version里的Cluster-Id会保持一致
可以用Ansible批量删除临时数据文件夹
playbook代码
# 因为 hadoop namenode -format 经常会导致hadoop的current文件夹里的clusterID会一致,所以编一个playbook来批量删除current文件夹 - name: delete-hdpdata-folder hosts: aaa remote_user: hadoop become: true become_user: hadoop tasks: - name: delete-hdpdata-all file: path: ~/hdpdata/ state: absent