当前位置: 首页 > 知识库问答 >
问题:

映射器输出中的部件文件表示拆分?

马淇
2023-03-14

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

共有1个答案

许学真
2023-03-14

可能不是。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类中的GetDefaultWorkFileAPI决定。以下是文档:

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'表示maps,'r'表示reduces和任务分区号(即任务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.taskAttributContext,java.lang.string)

位于org.apache.hadoop.mapred包中的较旧的FileOutputFormatAPI也以类似的方式工作。以下是参考:https://hadoop.apache.org/docs/r2.4.1/api/org/apache/hadoop/mapred/fileoutputformat.html#getUniquename(org.apache.hadoop.mapred.jobconf,java.lang.string)

 类似资料:
  • 我正在学习Hadoop,并尝试执行我的Mapduce程序。所有Map任务和Reduce er任务都完成得很好,但Reducer将Mapper Output写入Output文件。这意味着根本没有调用Reduce函数。我的示例输入如下所示 预期输出如下所示 以下是我的计划。 这里问了同样的问题,我在reduce函数中使用了Iterable值作为该线程中建议的答案。但这并不能解决问题。我不能在那里发表评

  • 我遇到了一个非常非常奇怪的问题。还原器确实工作,但如果我检查输出文件,我只能找到映射器的输出。当我尝试调试时,在将映射器的输出值类型从Longwritable更改为Text之后,我发现了与单词计数示例相同的问题 这是结果。 然后我在输出文件中发现了奇怪的结果。这个问题发生在我将map的输出值类型和reducer的输入键类型更改为Text之后,无论我是否更改了reduce输出值的类型。我还被迫更改j

  • 我使用的是hadoop版本0.20和hadoop-core:1.2.0.jar 有没有可能使用新的hadoop API做到这一点?

  • 我是Hadoop的新手,但这是我上个月的一个学习项目。 为了使这一点足够模糊,以便对其他人有用,让我先抛出基本目标……假设: < li >显然,您有一个大型数据集,包含数百万个基本ASCII文本文件。 < ul > < li >每个文件都是一个“记录” e. g. /user/hduser/data/customer1/YYYY-MM-DD, /user/hduser/data/customer2

  • 我正在从mapper生成两个输出文件。我使用Multipleoutput api生成两个输出。我不确定这样做是否正确。这是我的代码。。请仔细检查一下,给我你的建议。。当我运行代码时,我得到了一个错误:java。lang.NullPointerException。。 这是日志... 错误:java。com上的lang.NullPointerException。尼尔森。grfe。Export\u Co

  • 问题内容: 我的用例如下: 我有一个仅地图的mapreduce作业,该作业需要一个输入文件,进行了大量的解析和调整,然后再写回。但是,某些行的格式可能正确也可能不正确,如果是这样,我想将原始行写入单独的文件中。 看来,执行此操作的一种方法是将文件名添加到我正在打印的行的前面,并使用multipleOutputFormat参数。例如,如果我最初有: 我可以改为: 此解决方案唯一的问题是我不希望fil