【问题标题】:Part files in mapper Output Represent the Split?映射器输出中的零件文件代表拆分?
【发布时间】:2015-12-17 05:57:10
【问题描述】:

作为映射器的输出生成的零件文件是否仅作为 part-m-00000、Part-m-00001 等表示第一个输入拆分、第二个输入拆分等等,它们是按顺序生成的吗? ?

【问题讨论】:

  • 你的问题有点不清楚。文件名是连续的,那么are they generated sequentially 是什么意思?
  • 按顺序我的意思是我研究过的映射器首先执行它开始给出输出但它们是如何编写的?第一个拆分是否意味着第一个映射器,第二个意味着第二个等等,零件文件是否与拆分有任何关系???

标签: hadoop mapreduce


【解决方案1】:

可能不是。 getSplits() 方法返回的拆分数组按照大小排序,最大的先行。这个排序后的数组向下传递,并为每个元素创建映射任务。因此,排序时会丢失订购信息。

参考:org.apache.hadoop.mapreduce.JobSubmitter 类。见方法writeSplits(..)

源代码链接: https://svn.apache.org/repos/asf/hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/JobSubmitter.java


进一步阅读如何确定文件名:

一旦确定了任务 ID,文件的名称就由 org.apache.hadoop.mapreduce.lib.output.FileOutputFormat 类中的 getDefaultWorkFile API 决定。这是文档:

getDefaultWorkFile

public Path getDefaultWorkFile(TaskAttemptContext context,
                               String extension)
                        throws IOException
Get the default path and filename for the output format.
Parameters:
context - the task context
extension - an extension to add to the filename
Returns:
a full path $output/_temporary/$taskid/part-[mr]-$id

这意味着“part”后缀是任务类型,'m' 表示映射,'r' 表示 reduce 和任务分区号(即任务 id)。例如,生成的作业的第一个地图文件的名称将是“part-m-00000”。

Javadoc 参考:https://hadoop.apache.org/docs/r2.4.1/api/org/apache/hadoop/mapreduce/lib/output/FileOutputFormat.html#getDefaultWorkFile(org.apache.hadoop.mapreduce.TaskAttemptContext, java.lang.String)

org.apache.hadoop.mapred 包中较旧的 FileOutputFormat API 也以类似的方式工作。这是参考:https://hadoop.apache.org/docs/r2.4.1/api/org/apache/hadoop/mapred/FileOutputFormat.html#getUniqueName(org.apache.hadoop.mapred.JobConf, java.lang.String)

【讨论】:

  • 这是否意味着 m-00000 代表第一个拆分 m-00001 代表第二个等等?你在说的是taskid 我在问他们是否意味着他们属于第一个分裂第二个分裂等等??
  • 可能不是。刚刚编辑了我的答案以显示全貌。
  • 我们能控制mapreduce的输出是如何写的吗? ?
  • 为此,不要直接使用默认的 FileOutputFormat 或它的子类。扩展类并覆盖方法。现在,FileOutputFormat 是一个抽象。您必须使用它的子类之一,例如 TextInputFormat。只需扩展该类。您还需要扩展 RecordWriter 和 Splits,因为 getDefaultWorkFile 是一个静态方法
猜你喜欢
  • 1970-01-01
  • 2023-02-19
  • 2022-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-26
  • 2015-04-19
  • 1970-01-01
相关资源
最近更新 更多