MR任务异常临时文件不删除
用户问题
MR任务异常临时文件为什么没有删除?
问题现象
HDFS临时目录文件过多,占用内存。
原因分析
MR任务提交时会将相关配置文件、jar包和-files添加的文件都放入hdfs上的临时目录,方便后面container启动以后获取相应的文件。由配置项yarn.app.mapreduce.am.staging-dir决定具体存放位置,默认值是/tmp/hadoop-yarn/staging。
正常运行的MR任务会在Job结束以后就清理这些临时文件,但是当Job对应的yarn任务是异常退出时,这些临时文件不会被清理,长时间积攒导致该临时目录下的文件数量越来越多,占用存储空间越来越多。
处理步骤
- 登录集群。
- 获取文件列表。
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>
- 统计当前运行中的任务。
mapred job -list 2>/dev/null | grep job_ | awk '{print $1}' > run_job_list
run_job_list文件里面就是当前正在运行的JobId列表,文件内容格式为:
job_<Timestamp>_<ID>
- 删除job_file_list文件中正在运行中的任务。确保在删除过期数据时不会误删正在运行任务的数据。
cat run_job_list | while read line; do sed -i "/$line/d" job_file_list; done
- 删除过期数据。
cat job_file_list | while read line; do hdfs dfs -rm -r $line; done
- 清除临时文件。
rm -rf run_job_list job_file_list