在 Linux 上使用 Hadoop 查日志,通常分 Hadoop 系统日志 和 作业(Job/Application)日志 两类。下面按常见场景说明。
Hadoop 各组件(NameNode、DataNode、ResourceManager、NodeManager 等)日志默认在:
$HADOOP_HOME/logs/
常见文件示例:
$HADOOP_HOME/logs/
├── hadoop-root-namenode-node1.log
├── hadoop-root-datanode-node1.log
├── yarn-root-resourcemanager-node1.log
├── yarn-root-nodemanager-node1.log
# 实时查看
tail -f $HADOOP_HOME/logs/hadoop-root-namenode-node1.log
# 查看错误
grep ERROR $HADOOP_HOME/logs/hadoop-root-datanode-node1.log
# 最近 100 行
tail -n 100 $HADOOP_HOME/logs/yarn-root-resourcemanager-node1.log
用户名(root)和主机名(node1)视实际环境而定。
yarn logs -applicationId application_123456_0001
查看某任务的:
# 只看错误
yarn logs -applicationId application_123456_0001 | grep ERROR
# 查看容器日志
yarn logs -applicationId application_123456_0001 -containerId container_01
YARN 默认会把日志聚合到 HDFS:
/user/root/.logs/
或
/tmp/logs/
查看:
hdfs dfs -ls /tmp/logs/root/logs/application_123456_0001
http://namenode:9870
http://resourcemanager:8088
→ Applications → 某个 Application → Logs如果是 MapReduce:
yarn logs -applicationId application_xxx
或
mapred job -logs job_123456_0001
# 服务起不来
tail -f $HADOOP_HOME/logs/*namenode*.log
# 任务失败
yarn logs -applicationId xxx | grep -A 20 Exception
# 磁盘/权限问题
grep -i "permission" $HADOOP_HOME/logs/*.log
如果你能告诉我:
我可以给你更精确的命令。