Hadoop在Linux环境中的故障排查需围绕日志分析、进程状态、网络连接、配置文件、资源管理五大核心方向展开,结合具体命令和常见场景逐步定位问题。
查看Hadoop日志
日志是故障排查的“第一现场”,Hadoop的日志默认存储在$HADOOP_HOME/logs目录下(如NameNode日志为hadoop-*-namenode-*.log、DataNode日志为hadoop-*-datanode-*.log)。使用以下命令快速定位错误:
tail -f $HADOOP_HOME/logs/*.log # 实时查看所有日志
grep -i "error\|fail" $HADOOP_HOME/logs/*.log # 过滤错误信息
重点关注堆栈跟踪(Stack Trace)和时间戳,可快速定位到具体组件(如NameNode、DataNode)和错误类型(如端口冲突、权限不足)。
检查Hadoop进程状态
使用jps命令列出所有Java进程,确认Hadoop核心组件(NameNode、DataNode、ResourceManager、NodeManager)是否正常运行:
jps
正常输出应包含上述组件(如NameNode、DataNode),若缺失则说明对应组件未启动,需进一步检查日志或手动启动。
验证网络连接
Hadoop集群依赖节点间通信,需确保所有节点网络通畅:
ping测试节点连通性:ping <目标IP>;netstat或ss检查端口监听状态(如NameNode默认端口50070、ResourceManager默认端口8088):netstat -tulnp | grep 50070 # 检查NameNode端口
ss -tulnp | grep 8088 # 检查ResourceManager端口
核查配置文件一致性
Hadoop的核心配置文件(core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml)需在所有节点保持一致,常见错误包括:
fs.defaultFS写成fs.default_fs);hdfs://namenode:9000应为hdfs://namenode:9000/);dfs.datanode.data.dir指定的目录未创建)。cat命令查看配置文件内容,确保参数符合集群环境。重启Hadoop服务
若上述步骤未解决问题,可尝试重启服务(注意:重启前需保存数据):
$HADOOP_HOME/sbin/stop-all.sh # 停止所有服务
$HADOOP_HOME/sbin/start-all.sh # 启动所有服务
重启后再次检查进程状态和日志,确认服务是否恢复。
NameNode无法启动
clusterID不一致、端口被占用。hadoop namenode -format
NameNode和DataNode的clusterID是否一致(位于dfs/name/current/VERSION和dfs/data/current/VERSION文件中),若不一致需修改为相同值;netstat检查端口(默认9000)是否被占用,若占用则修改core-site.xml中的fs.defaultFS端口。DataNode无法启动
dfs.datanode.data.dir目录不存在或权限不足、与NameNode的clusterID不一致。mkdir -p $HADOOP_HOME/data/datanode
chown -R hadoop:hadoop $HADOOP_HOME/data/datanode
hdfs-site.xml中的dfs.datanode.data.dir为正确路径;clusterID。ResourceManager/NodeManager无法启动
yarn-site.xml配置错误(如yarn.resourcemanager.hostname未设置)、端口冲突。yarn-site.xml中的关键参数(如yarn.resourcemanager.hostname需设置为ResourceManager节点IP);netstat检查端口(默认8088)是否被占用,若占用则修改端口。任务执行失败
yarn node -list查看节点状态,yarn queue -status default查看队列资源,若资源不足则调整yarn-site.xml中的yarn.nodemanager.resource.memory-mb(NodeManager内存)和yarn.nodemanager.resource.cpu-vcores(NodeManager CPU核心数);hdfs dfs -ls检查数据路径,确保数据分布在任务运行的节点上(提升数据本地性);hdfs dfs -chmod -R 755 /user/hadoop)。分析系统资源
使用top、iostat、vmstat等工具监控系统资源使用情况:
top # 查看CPU、内存占用
iostat -x 1 10 # 查看磁盘IO(每秒刷新1次,共10次)
vmstat 1 10 # 查看虚拟内存、进程状态
若CPU占用过高,可能是MapReduce任务并行度设置不合理;若磁盘IO过高,可能是HDFS块大小设置过小。
检查系统日志
Linux系统日志(如/var/log/messages、/var/log/syslog)可能记录Hadoop相关的底层错误(如内核崩溃、磁盘故障),使用dmesg命令查看内核日志:
dmesg | grep -i hadoop
结合系统日志可快速定位硬件或系统层面的问题。
使用监控工具
对于大规模集群,可使用Cloudera Manager、Ambari等可视化工具监控Hadoop状态(如节点健康、资源使用、任务进度),这些工具提供报警功能,能提前发现问题。
通过以上步骤,可系统化排查Hadoop在Linux环境中的故障。需注意,日志分析是核心,结合命令和工具可快速定位问题根源;日常运维中需定期备份配置文件和数据,避免误操作导致故障。