【问题标题】:Hadoop MapReduce intermediate outputHadoop MapReduce 中间输出
【发布时间】:2011-10-23 16:54:18
【问题描述】:

有没有办法在不编辑应用程序的情况下输出记录 MapReduce 作业的中间(映射阶段)输出? (应用程序不是我的,但集群是我的,我可以随意设置 Hadoop 集群)

【问题讨论】:

  • 可以重新配置作业吗?

标签: logging hadoop mapreduce


【解决方案1】:

keep.task.files.pattern参数可以用来保存中间文件。作业完成后,必须手动清理中间文件。由于这是一个map/reduce任务属性,所以必须在配置文件中设置,再打包jar文件。

【讨论】:

  • 您能详细说明一下吗?我已经设置了这个参数,并在输出目录和映射的本地缓存中到处搜索,但在任何地方都没有 map-stage 输出......
  • ...我对 ${mapred.output.dir}/_temporary 寄予厚望,但我能找到的只有 reduce "_attempt_local_0003_r_000000" 文件夹,而不是它的 "m" 对应文件夹
  • 我在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 是读取序列文件的示例代码。你用的是什么模式?
【解决方案2】:

我不认为 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 2016-01-21
    • 1970-01-01
    相关资源
    最近更新 更多