Core节点出现df显示的容量和du显示的容量不一致
问题现象
Core节点出现df显示的容量和du显示的容量不一致:
分别使用命令df -h 和命令du -sh /srv/BigData/hadoop/data1/查询得到的/srv/BigData/hadoop/data1/目录磁盘占用量相差较大(大于10 GB)。
原因分析
使用命令lsof |grep deleted可以查询到此目录下有大量log文件处于deleted状态。
出现此问题的一种情况是长时间运行某些Spark任务,任务中的一些Container一直运行,并且持续产生日志;Spark的executor在打印日志的时候使用了log4j的日志滚动功能,将日志输出到stdout文件下;而Container同时也会监控这个文件,导致此文件被两个进程同时监控。当其中一个进程按照配置滚动的时候,删除了最早的日志文件,但是另一个进程依旧占用此文件句柄,从而产生了deleted状态的文件。
处理步骤
将Spark的executor日志输出目录修改成其他名称:
- 打开日志配置文件,默认在“<客户端安装目录>/Spark/spark/conf/log4j-executor.properties”。
- 将日志输出文件改名。
例如:
log4j.appender.sparklog.File = ${spark.yarn.app.container.log.dir}/stdout
改为:
log4j.appender.sparklog.File = ${spark.yarn.app.container.log.dir}/stdout.log
- 保存退出。
- 重新提交任务。