文档首页/ MapReduce服务 MRS/ 故障排除/ 使用Yarn/ MapReduce任务异常,临时文件未删除
更新时间:2023-11-02 GMT+08:00

MapReduce任务异常,临时文件未删除

用户问题

MapReduce任务异常临时文件为什么没有删除?

MR任务即MapReduce任务,关于MapReduce介绍请参考MapReduce

问题现象

HDFS临时目录文件过多,占用内存。

原因分析

MapReduce任务提交时会将相关配置文件、jar包和-files参数后添加的文件都上传至HDFS的临时目录,方便Container启动后获取相应的文件。系统通过配置项“yarn.app.mapreduce.am.staging-dir”决定具体存放位置,默认值是“/tmp/hadoop-yarn/staging”。

正常运行的MapReduce任务会在Job结束以后就清理这些临时文件,但是当Job对应的Yarn任务异常退出时,这些临时文件不会被清理,长时间积攒导致该临时目录下的文件数量越来越多,占用存储空间越来越多。

处理步骤

  1. 登录集群客户端。

    1. root用户登录任意一个Master节点,用户密码为创建集群时用户自定义的密码。
    2. 如果集群开启Kerberos认证,执行如下命令进入客户端安装目录并设置环境变量,再认证用户并按照提示输入密码,该密码请向管理员获取。

      cd 客户端安装目录

      source bigdata_env

      kinit hdfs

    3. 如果集群未开启Kerberos认证,执行如下命令切换到omm用户,再进入客户端安装目录设置环境变量。

      su - omm

      cd 客户端安装目录

      source bigdata_env

  2. 获取文件列表。

    hdfs dfs -ls /tmp/hadoop-yarn/staging/*/.staging/ | grep "^drwx" | awk '{print $8}' > job_file_list

    job_file_list文件中就是所有任务的文件夹列表,文件内容参考:

    /tmp/hadoop-yarn/staging/omm/.staging/job__<Timestamp>_<ID>

  3. 统计当前运行中的任务。

    mapred job -list 2>/dev/null | grep job_ | awk '{print $1}' > run_job_list

    run_job_list文件里面就是当前正在运行的JobId列表,文件内容格式为:

    job_<Timestamp>_<ID>

  4. 删除job_file_list文件中正在运行中的任务,确保在删除过期数据时不会误删正在运行任务的数据。

    cat run_job_list | while read line; do sed -i "/$line/d" job_file_list; done

  5. 删除过期数据。

    cat job_file_list | while read line; do hdfs dfs -rm -r $line; done

  6. 清除临时文件。

    rm -rf run_job_list job_file_list