问题表现:HDFS启动失败,报错提示“配置文件格式错误”或“属性缺失”。
原因:core-site.xml、hdfs-site.xml等配置文件的XML格式不规范(如多余空格、缺失闭合标签、属性值未用引号包裹)。
解决方法:
vim)仔细检查配置文件,确保标签正确闭合(如<configuration>与</configuration>匹配);fs.defaultFS、dfs.replication等属性的写法)。问题表现:执行HDFS命令时报错“command not found”或“HADOOP_HOME未设置”。
原因:未正确配置JAVA_HOME、HADOOP_HOME等环境变量,或未将Hadoop的bin、sbin目录添加到PATH中。
解决方法:
~/.bashrc文件,添加以下内容(根据实际安装路径调整):export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 # 替换为你的Java路径
export HADOOP_HOME=/usr/local/hadoop # 替换为你的Hadoop路径
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source ~/.bashrc使配置生效;echo $JAVA_HOME、echo $HADOOP_HOME应输出正确路径。问题表现:NameNode无法与DataNode通信,报错“Permission denied (publickey)”或“无法连接到远程主机”。
原因:未生成SSH密钥对,或未将公钥复制到目标节点的authorized_keys文件中。
解决方法:
ssh-keygen -t rsa(直接按回车键,默认保存路径);ssh-copy-id hadoop@<节点IP>(替换为实际用户名和IP);ssh hadoop@<节点IP>,无需输入密码即可登录。问题表现:执行start-dfs.sh后,NameNode进程未启动,报错“元数据损坏”或“无法锁定元数据目录”。
原因:元数据目录(dfs.namenode.name.dir配置的路径)损坏,或存在残留的元数据文件。
解决方法:
/var/log/hadoop/hadoop-<用户名>-namenode-<主机名>.log),定位具体错误;edits文件,将SecondaryNameNode的fsimage复制到NameNode的dfs.namenode.name.dir目录,然后重启集群;hdfs namenode -format(注意:格式化会清除所有HDFS数据,需提前备份)。问题表现:jps命令显示DataNode进程未启动,或HDFS Web界面显示“Live Nodes”数量为0;或dfsadmin -report报错“副本不足”。
原因:
dfs.datanode.data.dir配置的路径)权限不足或磁盘故障;dfs.replication=3但只有1个DataNode)。chmod -R 755 /path/to/hadoop/hdfs/datanode(替换为实际路径);dfs.datanode.data.dir配置;ping命令),/etc/hosts文件中无错误的IP映射(如将主机名映射到127.0.0.1,需注释掉此类行);问题表现:执行hdfs dfs -ls /时报错“Retrying connect to server localhost/127.0.0.1:9000. Already tried X time(s)”。
原因:core-site.xml中的fs.defaultFS配置错误(如hdfs://localhost:9000),或NameNode未启动。
解决方法:
core-site.xml中的fs.defaultFS配置,确保其值为NameNode的实际地址(如hdfs://<NameNode-IP>:9000);hadoop-daemon.sh start namenode(或start-dfs.sh);http://<NameNode-IP>:50070(Hadoop 2.x)或http://<NameNode-IP>:9870(Hadoop 3.x),查看NameNode状态。问题表现:执行hdfs dfs -appendToFile时报错“Failed to APPEND_FILE… lease recovery is in progress. Try again later”。
原因:HDFS客户端无法获取文件租约(lease),通常是因为DataNode数量不足(如伪分布式模式下只有1个DataNode),无法满足副本要求。
解决方法:
hdfs-site.xml,添加以下配置(针对小集群):<property>
<name>dfs.client.block.write.replace-datanode-on-failure.policy</name>
<value>NEVER</value>
</property>
stop-dfs.sh && start-dfs.sh;问题表现:HDFS服务无法启动,报错“Address already in use”(如9000、50070端口被占用)。
原因:其他进程占用了HDFS所需的端口(如fs.defaultFS配置的端口、Web UI端口)。
解决方法:
netstat或ss命令查找占用端口的进程:sudo netstat -tuln | grep 9000;sudo kill -9 <进程ID>(替换为实际进程ID);fs.defaultFS的端口从9000改为9001),并同步更新所有相关配置。问题表现:上传到HDFS的中文文件显示为乱码(如“???”)。
原因:源文件或HDFS客户端的编码格式与目标文件不一致(如源文件为UTF-8,客户端为GBK)。
解决方法:
vim编辑文件时输入:set fileencoding=utf-8确认);hdfs dfs -put -D dfs.client.socket-timeout=30000 -D dfs.client.use.datanode.hostname=true -D dfs.datanode.data.dir.perm=755 本地文件 HDFS路径(部分Hadoop版本可能需要额外配置);core-site.xml中的io.file.buffer.size),确保与客户端一致。问题表现:HDFS读写速度慢,dfsadmin -report显示磁盘利用率高或网络带宽不足。
原因:DataNode数量少、块大小设置不合理、网络带宽瓶颈、磁盘I/O性能差。
解决方法:
hdfs-site.xml中的dfs.datanode.data.dir;hdfs-site.xml中的dfs.blocksize(如从128MB调整为256MB,适用于大文件场景);hdfs-site.xml中添加<property><name>dfs.client.read.shortcircuit</name><value>true</value></property>,减少网络传输;iostat命令监控磁盘I/O,更换慢磁盘。