1. 环境变量配置错误
环境变量(如HADOOP_HOME、JAVA_HOME)未正确配置或未生效,导致Hadoop命令无法识别或执行。解决方法:编辑/etc/profile或~/.bashrc文件,添加export HADOOP_HOME=/path/to/hadoop、export JAVA_HOME=/path/to/java及export PATH=$HADOOP_HOME/bin:$PATH,执行source /etc/profile使配置生效。
2. 配置文件参数错误
core-site.xml(如fs.defaultFS未指向正确的NameNode地址)、hdfs-site.xml(如dfs.namenode.name.dir路径不存在)等配置文件参数设置错误,导致HDFS无法正常启动。解决方法:仔细检查配置文件中的路径、URI分隔符(使用Linux风格的/)及参数值,确保dfs.replication(副本数)在单机模式下设为1、集群模式下设为3(或其他合理值)。
3. Java环境问题
未安装Java或JAVA_HOME未正确设置,导致Hadoop依赖的Java环境缺失。解决方法:安装OpenJDK(如yum install java-11-openjdk-devel),编辑/etc/profile添加export JAVA_HOME=/usr/lib/jvm/java-11-openjdk,执行source /etc/profile使配置生效。
4. 主机名解析失败
/etc/hosts文件中未配置主机名与IP地址的映射,导致节点间无法通过主机名通信(如NameNode无法连接DataNode)。解决方法:编辑/etc/hosts文件,添加IP地址 主机名映射(如192.168.1.100 hadoop-namenode、192.168.1.101 hadoop-datanode1)。
5. 目录权限问题
HDFS存储目录(如dfs.namenode.name.dir、dfs.datanode.data.dir)的权限未正确设置,导致Hadoop进程无法读写数据。解决方法:使用chown命令将目录所有权赋予Hadoop运行用户(通常为hdfs),如chown -R hdfs:hdfs /path/to/namenode/dir、chown -R hdfs:hdfs /path/to/datanode/dir;使用chmod设置目录权限(如chmod -R 755 /path/to/dir)。
6. NameNode格式化问题
NameNode未格式化或格式化后数据目录被误删,导致集群无法启动(提示“NameNode not formatted”)。解决方法:停止所有HDFS进程(stop-dfs.sh),删除hadoop目录下的data和logs文件夹(如rm -rf /path/to/hadoop/data、rm -rf /path/to/hadoop/logs),然后执行hdfs namenode -format命令格式化NameNode,最后启动HDFS(start-dfs.sh)。
7. 防火墙/SELinux阻止端口访问
防火墙或SELinux阻止了HDFS使用的端口(如NameNode的50070端口、DataNode的50010端口),导致节点间无法通信。解决方法:临时关闭防火墙(systemctl stop firewalld)或开放相关端口(firewall-cmd --add-port=50070/tcp --permanent、firewall-cmd --reload);临时关闭SELinux(setenforce 0)或修改SELinux配置(vi /etc/selinux/config,将SELINUX=enforcing改为SELINUX=permissive)。
8. SSH免密登录配置失败
SSH免密登录未正确配置,导致NameNode无法自动连接DataNode(如启动HDFS时提示“Permission denied”)。解决方法:在NameNode节点上生成密钥对(ssh-keygen -t rsa),使用ssh-copy-id将公钥复制到所有DataNode节点(如ssh-copy-id hadoop-datanode1),验证免密登录(ssh hadoop-datanode1是否能无需密码登录)。
9. 数据块副本分布不均(机架感知配置错误)
未正确配置机架感知信息,导致所有DataNode被视为同一机架,数据块副本集中在少数节点,增加网络负载且存在单点故障风险。解决方法:编辑hdfs-site.xml文件,添加机架感知配置(如dfs.network.script指向拓扑脚本/path/to/topology.sh),脚本需根据节点IP返回机架信息(如/rack1、/rack2);使用hdfs dfsadmin -printTopology命令验证拓扑结构是否正确。
10. 高可用性(HA)配置问题
NameNode状态切换失败(如Active NameNode宕机后Standby未自动接管)、元数据不一致(脑裂),导致集群不可用。解决方法:配置JournalNode集群(dfs.journalnode.edits.dir指定JournalNode数据目录,启动JournalNode服务start-dfs.sh);使用hdfs namenode -bootstrapStandby命令同步NameNode元数据;配置ZooKeeper集群(ha.zookeeper.quorum指定ZooKeeper节点地址),通过ZooKeeper监控NameNode状态并实现自动故障转移。