文档首页/ MapReduce服务 MRS/ 故障排除/ 集群管理类/ Core节点出现df显示的容量和du显示的容量不一致
更新时间:2023-11-10 GMT+08:00

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日志输出目录修改成其他名称:

  1. 打开日志配置文件,默认在“<客户端安装目录>/Spark/spark/conf/log4j-executor.properties”。
  2. 将日志输出文件改名。

    例如:

    log4j.appender.sparklog.File = ${spark.yarn.app.container.log.dir}/stdout

    改为:

    log4j.appender.sparklog.File = ${spark.yarn.app.container.log.dir}/stdout.log

  3. 保存退出。
  4. 重新提交任务。