温馨提示×

Hadoop在Ubuntu上的日志分析

小樊
38
2025-12-18 19:37:32
栏目: 智能运维

Hadoop 在 Ubuntu 上的日志分析与排查

一 日志位置与快速查看

  • 日志默认位于 $HADOOP_HOME/logs,常见文件命名包含组件名与主机名,例如:hadoop-<用户名>-namenode-<主机名>.loghadoop-<用户名>-datanode-<主机名>.logyarn-<用户名>-resourcemanager-<主机名>.logyarn-<用户名>-nodemanager-<主机名>.log。进入目录后可用以下命令快速定位与跟踪:
    • 查看目录:ls $HADOOP_HOME/logs
    • 实时跟踪:tail -f $HADOOP_HOME/logs/hadoop--namenode-.log
    • 关键字检索:grep -n “ERROR|Exception” $HADOOP_HOME/logs/hadoop--namenode-.log
    • 按时间查看尾部:tail -n 200 $HADOOP_HOME/logs/hadoop--datanode-.log
  • 若未设置 $HADOOP_HOME,可用实际安装路径(如 /usr/local/hadoop/logs)替代。上述路径与命令适用于单机和伪分布式环境。

二 常见报错与定位要点

  • IPC 端口误用:在浏览器访问 fs.defaultFS=hdfs://localhost:9000 会报 “It looks like you are making an HTTP request to a Hadoop IPC port”。应改用 NameNode Web UI 端口(如 50070) 访问;9000 是 HDFS 的 IPC 端口,非 HTTP 接口。
  • 服务未启动或异常退出:先用 jps 检查进程(应看到 NameNode、DataNode、ResourceManager、NodeManager 等),若缺失,启动相应进程并再次查看对应日志定位根因。
  • 连接被拒或超时:确认进程已启动、网络与端口可达;如启用防火墙(如 ufw),放行对应 Web 端口(例如 sudo ufw allow 50070)。
  • 磁盘与权限:日志中出现 No space left on device 需清理磁盘;出现 Permission denied 需检查目录与文件权限及运行用户。

三 日志格式与关键信息提取

  • 典型行格式为:日期 时间 级别 类名 信息,例如:
    • 2013-03-06 15:23:48,132 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: STARTUP_MSG: Starting DataNode
    • 2013-03-06 15:23:58,346 INFO org.apache.hadoop.http.HttpServer: Jetty bound to port 50075
  • 实战提取思路(命令行组合):
    • 错误与异常快速定位:grep -E “ERROR|Exception|WARN” $HADOOP_HOME/logs/hadoop--namenode-.log | tail -n 50
    • 启动与端口绑定:grep -E “STARTUP_MSG|Jetty bound to port” $HADOOP_HOME/logs/hadoop--datanode-.log
    • 按时间窗口过滤(示例:2024-12-18 10 点之后):grep “2024-12-18 1[0-9]” $HADOOP_HOME/logs/hadoop--namenode-.log
  • 上述格式与字段含义可直接用于编写脚本做结构化解析与告警。

四 用 Hive 对日志做统计与可视化

  • 将日志落地到 HDFS:hadoop fs -mkdir -p /logs/hadoop && hadoop fs -put $HADOOP_HOME/logs/*.log /logs/hadoop
  • Hive 建表(示例,按空格切分,实际请按日志格式调整):
    • CREATE TABLE hadoop_logs ( log_time STRING, level STRING, logger STRING, message STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ’ ’ STORED AS TEXTFILE LOCATION ‘/logs/hadoop’;
  • 常用统计示例:
    • 按级别计数:SELECT level, COUNT(*) AS cnt FROM hadoop_logs GROUP BY level;
    • Top 10 报错类:SELECT logger, COUNT(*) AS cnt FROM hadoop_logs WHERE level=‘ERROR’ GROUP BY logger ORDER BY cnt DESC LIMIT 10;
    • 错误趋势(按小时):SELECT substr(log_time, 1, 13) AS hour, COUNT(*) AS err_cnt FROM hadoop_logs WHERE level=‘ERROR’ GROUP BY substr(log_time, 1, 13) ORDER BY hour;
  • 结果可导出到 MySQL(如通过 Sqoop)后,用 ECharts 等做可视化展示。

0