Ubuntu环境下Hadoop日志查看与管理技巧
Hadoop的日志默认存储在$HADOOP_HOME/logs目录下($HADOOP_HOME为Hadoop安装路径)。常见日志文件包括:
hadoop-<username>-namenode-<hostname>.loghadoop-<username>-datanode-<hostname>.loghadoop-<username>-resourcemanager-<hostname>.loghadoop-<username>-nodemanager-<hostname>.logls $HADOOP_HOME/logs命令查看所有日志文件,或使用less、cat命令直接打开指定文件。tail -f命令实时查看日志文件的更新(如NameNode日志),便于跟踪实时运行状态。tail -f $HADOOP_HOME/logs/hadoop-hadoop-namenode-master.loghead -n命令查看日志文件的前N行(如查看前10行)。head -n 10 $HADOOP_HOME/logs/hadoop-hadoop-datanode-slave1.logcat命令输出日志文件的完整内容(适合小文件)。cat $HADOOP_HOME/logs/hadoop-hadoop-namenode-master.logsed命令提取日志文件的某一行范围(如第2至200行)。sed -n '2,200p' $HADOOP_HOME/logs/hadoop-hadoop-datanode-master.loggrep命令搜索日志中的关键词(如“ERROR”“Segmentation fault”),快速定位问题。grep "ERROR" $HADOOP_HOME/logs/hadoop-hadoop-datanode-master.loggrep -c统计关键词出现的次数(如统计ERROR日志数量)。grep -c "ERROR" $HADOOP_HOME/logs/hadoop-hadoop-datanode-master.logtail命令查看错误发生前后的上下文(如最后100行)。tail -100 $HADOOP_HOME/logs/hadoop-hadoop-datanode-master.logyarn logs命令查看应用程序的日志(如MapReduce作业)。需指定应用程序ID(可通过yarn application -list获取)。yarn logs -applicationId application_1234567890000_0001http://<namenode-host>:50070/logs/http://<resourcemanager-host>:8088/cluster/app/<application-id>/logsgrep、tail、awk等命令进行高级过滤。例如,查看包含“ERROR”的最后10行日志:tail -100 $HADOOP_HOME/logs/hadoop-hadoop-datanode-master.log | grep "ERROR"awk提取错误类型并统计数量(如按“ERROR:”后面的关键词分类)。awk '/ERROR:/{print $3}' $HADOOP_HOME/logs/hadoop-hadoop-datanode-master.log | sort | uniq -cgrep "ERROR" $HADOOP_HOME/logs/hadoop-hadoop-datanode-master.log > error_logs.txt。$HADOOP_HOME/etc/hadoop/log4j.properties文件,改变日志输出的详细程度。例如,将根日志级别设置为DEBUG(详细日志)或ERROR(仅错误日志):log4j.rootLogger=DEBUG, console(调试模式)或log4j.rootLogger=ERROR, console(生产模式)。log4j.logger.org.apache.hadoop.hdfs.server.namenode=DEBUGlog4j.properties中添加滚动策略(如按天滚动,保留10个备份文件,每个文件最大10MB):log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=${hadoop.log.dir}/hadoop.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
修改后需重启Hadoop服务使配置生效。