1.namenode无法启动问题
报错1.
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined.
原因:不能用 root 用户直接启动 Hadoop 的 HDFS 组件(NameNode / DataNode / SecondaryNameNode)
解决方式:
假如你已经创建了一个叫 hadoop 的用户并配置好了环境,执行:
切换用户从新启动
su - hadoop
start-dfs.sh
报错2
sudo: no tty present and no askpass program specified
报错原因:
这个错误说明脚本中调用了 sudo 命令,但当前用户没有交互终端(tty)输入密码,也没有配置免密
解决方法:
给 hadoop 用户配置 sudo 免密
以 root 用户运行:
visudo
##在文件最后添加,然后保存退出
hadoop ALL=(ALL) NOPASSWD: ALL
##再次启动
start-dfs.sh
报错3
namenode is running as process 25061. Stop it first and ensure /tmp/hadoop-hadoop-namenode.pid file is empty before retry.
报错原因:
NameNode 已经在运行,提示不要重复启动
解决方式
##关闭现有进程
stop-dfs.sh
##或者直接杀掉
kill -9 25061
rm -f /tmp/hadoop-hadoop-namenode.pid
##然后再启动
start-dfs.sh
解决其他DataNode 启动失败报错
# 查看 DataNode 日志是否报错
tail -n 100 $HADOOP_HOME/logs/hadoop-hadoop-datanode-*.log
# 查看 NameNode 日志
tail -n 100 $HADOOP_HOME/logs/hadoop-hadoop-namenode-*.log
##分析日志
tail -n 50 $HADOOP_HOME/logs/hadoop-hadoop-datanode-*.log
列如
java.io.IOException: Incompatible clusterIDs in /usr/local/hadoop/hdfs/datanode:
namenode clusterID = CID-8014bf5c-da4d-443f-8b77-5d0767b7607a;
datanode clusterID = CID-7cbd3b2b-90cc-4187-974d-cea39ec470db
这是 Hadoop 中最常见的错误之一,当 NameNode 格式化(hdfs namenode -format)之后,clusterID 发生变化,而本地的 DataNode 存储目录还保留着旧的 clusterID,就会导致不一致而拒绝启动。
解决方式
清空旧的 DataNode 数据目录
⚠️ 此操作会删除旧的 DataNode 数据(不影响 HDFS 上真正的数据,只是本地缓存块),用于单机或测试环境是安全的。
查看 dfs.datanode.data.dir 配置值
##-A 2 表示多显示后面 2 行,通常能显示出 <value>。
grep -A 2 dfs.datanode.data.dir $HADOOP_HOME/etc/hadoop/hdfs-site.xml
你会看到类似
<property><name>dfs.datanode.data.dir</name><value>/usr/local/hadoop/hdfs/datanode</value>
</property>
如果路径是 /usr/local/hadoop/hdfs/datanode,就执行:
rm -rf /usr/local/hadoop/hdfs/datanode/*
##然后再执行
start-dfs.sh
jps
⚠️ 注意
如果你看到的是别的路径,比如 /tmp/hadoop-hadoop/dfs/data,你就清空那个路径下的内容。
不要删错了 dfs.namenode.name.dir 的路径,那是 NameNode 的元数据。
如图最后问题解决,启动成功