HDFS的日志文件默认存储在$HADOOP_HOME/logs目录下,按组件分类:
hadoop-<username>-namenode-<hostname>.loghadoop-<username>-datanode-<hostname>.loghadoop-<username>-secondarynamenode-<hostname>.log/var/log/Bigdata/audit/hdfs/目录(路径可通过hdfs-site.xml配置)。HDFS使用Log4j作为核心日志框架,日志配置主要通过$HADOOP_HOME/etc/hadoop/log4j.properties文件完成。该文件定义了日志级别、输出格式、输出位置(如控制台、文件)等参数。
日志级别决定了日志的详细程度,HDFS支持以下级别(从低到高):
log4j.properties文件:$HADOOP_HOME/etc/hadoop/log4j.properties;log4j.rootLogger=INFO, console改为log4j.rootLogger=DEBUG, console;log4j.logger.org.apache.hadoop.hdfs行,修改为log4j.logger.org.apache.hadoop.hdfs=DEBUG;$HADOOP_HOME/sbin/stop-dfs.sh
$HADOOP_HOME/sbin/start-dfs.sh
```。
使用hadoop dfsadmin命令动态调整日志级别(适用于调试):
hadoop dfsadmin -setLogLevel org.apache.hadoop.hdfs.DEBUG
此命令会立即生效,但重启服务后会恢复原配置。
使用logrotate工具自动轮转HDFS日志,步骤如下:
/etc/logrotate.d/hadoop-hdfs;/var/log/hadoop/hdfs/*.log {
daily # 每天轮转
rotate 7 # 保留7个备份
compress # 压缩旧日志(gzip)
missingok # 忽略缺失文件
notifempty # 空日志不轮转
create 0640 root root # 新日志权限
}
logrotate -vf /etc/logrotate.d/hadoop-hdfs(强制轮转并显示详细信息)。tail -f $HADOOP_HOME/logs/hadoop-<username>-namenode-<hostname>.log;tail -n 100 $HADOOP_HOME/logs/hadoop-<username>-namenode-<hostname>.log。通过HDFS Web UI(默认端口50070,高版本为9870)访问:
http://<namenode-host>:50070 → 点击“Logs”菜单,查看NameNode、DataNode等组件的日志。
编辑hdfs-site.xml,添加以下配置:
<property>
<name>hdfs.audit.logger</name>
<value>INFO, RFAS</value>
</property>
<property>
<name>hadoop.security.audit.logger</name>
<value>INFO, RFAS</value>
</property>
<property>
<name>hdfs.audit.log.file</name>
<value>hdfs-audit.log</value>
</property>
重启HDFS服务使配置生效。
/var/log/Bigdata/audit/hdfs/;vim)或命令行工具(如grep)查看:grep "create" /var/log/Bigdata/audit/hdfs/hdfs-audit.log # 查找文件创建操作
hadoop-logs):groupadd hadoop-logs;hadoop用户和hadoop-logs组:chown -R hadoop:hadoop-logs $HADOOP_HOME/logs
chown -R hadoop:hadoop-logs /var/log/hadoop/hdfs
chmod -R 750 $HADOOP_HOME/logs。使用logrotate的maxage参数删除超过指定天数的日志(如30天):
/var/log/hadoop/hdfs/*.log {
daily
rotate 7
compress
maxage 30 # 删除30天前的日志
missingok
notifempty
create 0640 root root
}
或编写脚本定期清理(如删除7天前的压缩日志):
find /var/log/hadoop/hdfs -name "*.gz" -mtime +7 -exec rm -f {} \;
将脚本添加到crontab(每天凌晨2点执行):
0 2 * * * /path/to/cleanup_script.sh
```。