配置了客户端参数导致临时文件残留

背景信息

1.配置了mapreduce.task.files.preserve.filepattern。

这是一个客户端参数,此参数在社区网站的官方文档中没有给出任何解释。而在源码中,获取此参数的方法注释为“Get the regular expression that is matched against the task names to see if we need to keep the files”。而在源码的mapred-default.xml配置文件中,也可以看到意思相近的解释“Keep all files from tasks whose task names match the given regular expression. Defaults to none”。但从源码逻辑分析,实际却不是这样的。只要在这个参数里配置了任何字符,当前作业在执行过程中产生的所有临时文件都会保留,并没有针对配置的文件名进行匹配。同时需要注意此参数可以通过java API进行设置:JobConf.setKeepTaskFilesPattern(String pattern)。

2.配置了mapreduce.task.files.preserve.failedtasks。

这是一个客户端参数,此参数在社区文档中给出的解释如下:“Should the files for failed tasks be kept. This should only be used on jobs that are failing, because the storage is never reclaimed. It also prevents the map outputs from being erased from the reduce directory as they are consumed.”而实际上从代码分析,当该参数配置为true时,只有在HDFS上的Job临时文件会保留,map输出的临时文件并不会被保留。该参数同样也可以通过java API进行设置:JobConf.setKeepFailedTaskFiles(boolean keep). 而该API接口提供的注解信息“Set whether the framework should keep the intermediate files for failed tasks.”同样也比较容易让人误解。事实上,只要将该参数配置为true,当前任务的中间文件在任务完成后就会被保留下来,而不管当前任务运行结果是成功还是失败。开发者提供此参数的目的是用户可以在发现某一任务执行失败后,将此参数设置为true,然后再次重新提交该任务,以保留中间文件进行问题分析。而不管是官方文档的解释还是接口注解,都比较容易让人误解为执行框架会判断当前任务的执行状态并为失败任务保留中间文件。

操作步骤

  1. 通过下载残留文件中的job_XXX_conf.xml文件找到相应的配置参数值,判断是否配置了某个参数?

    • 是,通过java API重新设置配置了的参数,问题解决。
      说明:
      原因1和原因2中的参数只要有一个生效就会使该目录下的临时文件保留,可以通过以下java API分别设置这2个参数:
      • JobConf.setKeepTaskFilesPattern(String pattern)

      • JobConf.setKeepFailedTaskFiles(boolean keep)

    • 否,请联系技术支持

返回主界面 返回上一步