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

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

马淇
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

  • 问题内容: 有人可以解释在xml映射文件中使用逆函数的方法吗,我正在阅读本教程,但无法理解在映射文件中的逆用法? 谢谢 问题答案: 逆仅决定关系中的哪个实体负责更新数据库以反映关联。 假设一对多的双向关联。代码A和B中有两个类,A包含一组B,B维护对A的引用。在数据库级别,只有一个外键要更新,B的表包含一个到主键的列的A。 在这种情况下,假设我们将inverse = true放在集合侧。这意味着仅