Hadoop在Ubuntu上的故障排查方法
使用jps命令查看Ubuntu系统中Hadoop相关Java进程是否正常运行。正常情况下,应看到NameNode、DataNode、ResourceManager、NodeManager等核心进程。若某进程缺失,说明对应组件未启动,需进一步排查该组件的日志(如NameNode未启动则查看hadoop-*-namenode-*.log)。
Hadoop的日志文件位于$HADOOP_HOME/logs目录下(如hadoop-*-namenode-*.log、hadoop-*-datanode-*.log),是故障排查的核心依据。使用tail -f命令实时查看日志,或通过grep过滤错误信息(如grep "ERROR" *.log),可快速定位具体错误原因(如InconsistentFSStateException表示HDFS元数据不一致)。
使用hdfs dfsadmin -report命令检查HDFS的整体状态,包括NameNode信息、DataNode列表、存储容量、数据块数量等。若某DataNode未上报信息,需检查其网络连接或日志中的SHUTDOWN_MSG(如DataNode shutting down due to clusterID mismatch)。
通过yarn node -list命令查看ResourceManager管理的NodeManager列表及状态(如RUNNING或LOST)。若NodeManager状态异常,需检查其日志(hadoop-*-nodemanager-*.log)中的错误信息(如Container launch failed)。
Hadoop集群依赖节点间的网络通信,使用ping <node_ip>命令测试所有节点之间的连通性。若无法ping通,需检查Ubuntu的网络配置(如IP地址、子网掩码、网关)或物理连接。
重点检查以下Hadoop配置文件的参数是否正确:
core-site.xml:fs.defaultFS(NameNode的URI,如hdfs://namenode:8020);hdfs-site.xml:dfs.replication(副本数,通常为3)、dfs.namenode.name.dir(NameNode元数据目录)、dfs.datanode.data.dir(DataNode数据目录);yarn-site.xml:yarn.resourcemanager.hostname(ResourceManager的IP/主机名)、yarn.nodemanager.aux-services(Shuffle服务,需设置为mapreduce_shuffle);mapred-site.xml:mapreduce.framework.name(框架名称,需设置为yarn)。Ubuntu的ufw防火墙可能阻止Hadoop所需的端口通信,需开放以下常用端口:
8020(NameNode RPC)、50010(DataNode数据传输)、50070(NameNode Web UI,Hadoop 2.x)/9870(Hadoop 3.x);8030(ResourceManager调度)、8088(ResourceManager Web UI)、50060(NodeManager状态)。
使用sudo ufw allow <port>命令开放端口。若为首次启动Hadoop或NameNode元数据损坏(如InconsistentFSStateException),需格式化HDFS。执行hdfs namenode -format命令清除NameNode的元数据目录(如dfs.name.dir指定的目录),然后重新启动Hadoop服务。注意:格式化会删除HDFS中的所有数据,需提前备份。
确保Ubuntu系统中已正确配置Java和Hadoop的环境变量:
JAVA_HOME(如/usr/lib/jvm/java-8-openjdk-amd64)需添加到~/.bashrc或~/.profile中,并通过source命令生效;HADOOP_HOME(Hadoop安装目录)、PATH(包含$HADOOP_HOME/bin和$HADOOP_HOME/sbin)需正确设置。编辑Ubuntu的/etc/hosts文件,将所有节点的IP地址与主机名映射添加进去(如192.168.1.1 namenode、192.168.1.2 datanode1)。避免使用localhost作为主机名(除非是单节点集群),防止Hadoop无法正确识别节点。
使用top、htop或vmstat命令监控Ubuntu系统的资源使用情况(CPU、内存、磁盘I/O)。若资源不足(如内存耗尽),可能导致Hadoop进程崩溃,需调整系统配置(如增加内存)或优化Hadoop参数(如yarn.nodemanager.resource.memory-mb)。
确保HDFS数据目录(dfs.data.dir)所在的磁盘有足够的空间(建议剩余空间大于总容量的10%)。若磁盘空间不足,DataNode无法存储数据块,会导致No space left on device错误,可通过df -h命令查看磁盘使用情况。