【发布时间】:2011-10-23 16:54:18
【问题描述】:
有没有办法在不编辑应用程序的情况下输出记录 MapReduce 作业的中间(映射阶段)输出? (应用程序不是我的,但集群是我的,我可以随意设置 Hadoop 集群)
【问题讨论】:
-
可以重新配置作业吗?
有没有办法在不编辑应用程序的情况下输出记录 MapReduce 作业的中间(映射阶段)输出? (应用程序不是我的,但集群是我的,我可以随意设置 Hadoop 集群)
【问题讨论】:
keep.task.files.pattern参数可以用来保存中间文件。作业完成后,必须手动清理中间文件。由于这是一个map/reduce任务属性,所以必须在配置文件中设置,再打包jar文件。
【讨论】:
mapred-site.xml 中将keep.task.files.pattern 设置为.*00000.*,在core-site.xml 中,参数hadoop.tmp.dir 设置为$HADOOP_HOME\tmp。执行作业后,file.out 和 file.out.index 位于 $HADOOP_HOME/tmp/mapred/local/taskTracker/praveensripati/jobcache/job_201111031937_0001/attempt_201111031937_0001_m_000001_0/output 文件夹中。这些文件采用 SequenceFile 格式。 Here 是读取序列文件的示例代码。你用的是什么模式?
我不认为 MR 框架提供任何配置来保存中间地图输出文件。即使存在这样的标志,它也不是很有用,因为:
地图产生的中间输出不容易被阅读/用作:
1) Key Value 输出在写入中间文件之前被序列化。
2)与Key Value对相关的元数据(Key Length,Value Length,Partition#)也写入这些文件(这个元数据是二进制格式)
这些中间文件的示例位置是:
a) 中间中间文件(溢出输出):/yarn/nm/usercache/root/appcache/application_1525687099554_0008/attempt_1525687099554_0008_m_000000_0_spill_0.out
b) 最终中间文件(合并输出):
/yarn/nm/usercache/root/appcache/application_1525687099554_0008/output/attempt_1525687099554_0008_m_000001_0/file.out
【讨论】: