Ubuntu环境下Hadoop常见问题解决方法
Hadoop依赖core-site.xml、hdfs-site.xml、yarn-site.xml等配置文件,格式错误(如多余空格、缺失闭合标签)或路径配置不当(如fs.defaultFS指向无效地址)会导致集群启动失败。
解决方法:
xmllint)检查格式正确性;dfs.namenode.name.dir指向的目录需存在且有写入权限);yarn.nodemanager.aux-services需设置为mapreduce_shuffle)。JAVA_HOME(Java运行环境)或HADOOP_HOME(Hadoop安装目录)未配置,或配置后未生效,会导致Hadoop命令无法识别或启动失败。
解决方法:
~/.bashrc(当前用户)或/etc/profile(所有用户),添加以下内容:export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # 根据实际Java安装路径调整
export HADOOP_HOME=/usr/local/hadoop # 根据实际Hadoop安装路径调整
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source ~/.bashrc(或source /etc/profile)使配置生效;echo $JAVA_HOME(应输出Java路径)、hadoop version(应显示Hadoop版本信息)。Hadoop集群节点间需要通过SSH无密码登录实现通信,若未正确配置,会导致start-dfs.sh或start-yarn.sh命令卡住或报错。
解决方法:
hadoop01)生成SSH密钥对:ssh-keygen -t rsa -P ''(直接回车,默认保存到~/.ssh/id_rsa);cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys;authorized_keys文件权限:chmod 600 ~/.ssh/authorized_keys;ssh hadoop02(从节点主机名),应无需输入密码即可登录。NameNode是HDFS的核心组件,启动失败常见原因包括元数据损坏(如未正常关闭集群)、dfs.namenode.name.dir目录权限不足或格式化问题。
解决方法:
$HADOOP_HOME/logs目录下的NameNode.log日志,定位具体错误(如java.io.IOException: NameNode is not formatted);fsimage和edits文件(位于dfs.namenode.name.dir目录);hdfs namenode -format格式化NameNode(注意:格式化会清除HDFS中的所有数据,需提前备份);dfs.namenode.name.dir目录存在且有写入权限(如chown -R hadoop:hadoop /usr/local/hadoop/data/namenode)。DataNode磁盘故障会导致数据丢失,dfs.replication(副本数)设置过高(如集群节点数少但副本数为3)会导致启动失败或空间不足。
解决方法:
df -h(查看磁盘使用率)、lsblk(查看磁盘分区);dfs.datanode.data.dir配置(如添加新分区路径),并重启DataNode;dfs.replication设置为1(hdfs-site.xml中修改),避免因副本不足导致启动失败;hdfs dfs -setrep 3 /path/to/file(将指定文件的副本数设置为3)。上传到HDFS的中文文件显示乱码,通常是由于文件编码与HDFS默认编码(UTF-8)不一致导致。
解决方法:
vim编辑文件时,输入:set fileencoding=utf-8);hdfs dfs -put -D dfs.client.socket-timeout=30000 -D dfs.client.use.datanode.hostname=true -D dfs.datanode.socket.write.timeout=30000 -D dfs.write.packet.size=65536 -D dfs.replication=1 -D dfs.blocksize=134217728 -D dfs.client.encoding=UTF-8 local_file /hdfs/path;hdfs dfs -cat /hdfs/path | iconv -f UTF-8 -t GBK(若需转换为GBK显示)。HDFS性能问题常见原因包括DataNode数量不足、块大小设置过小、网络带宽瓶颈或磁盘I/O过高。
解决方法:
hadoop用户环境变量、配置SSH免密登录、启动DataNode服务);hdfs-site.xml中的dfs.blocksize(如设置为256M或512M,适用于大文件处理);hdfs-site.xml中添加dfs.client.read.shortcircuit true,减少数据通过网络传输;top(CPU)、free -h(内存)、iostat -x 1(磁盘I/O)命令查看资源使用情况,优化瓶颈环节(如增加内存、更换高速磁盘)。Hadoop对文件和目录的权限控制严格,常见错误包括Permission denied(无法访问目录)、Cannot create directory(无法创建目录)。
解决方法:
hadoop用户操作:所有Hadoop命令需以hadoop用户身份执行(如sudo -u hadoop hdfs dfs -ls /);hdfs dfs命令设置权限(如hadoop fs -chmod 777 /user/hadoop/input,允许所有用户读写执行;hadoop fs -chown hadoop:hadoop /user/hadoop/input,将目录所有者设置为hadoop用户);hdfs-site.xml中的dfs.permissions.enabled(设为false可关闭权限检查,但会降低安全性,仅用于测试环境)。