gpt4 book ai didi

hadoop - 映射器输出中的零件文件是否代表拆分?

转载 作者:可可西里 更新时间:2023-11-01 14:52:53 26 4
gpt4 key购买 nike

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

最佳答案

不一定。 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 决定类(class)。这是文档:

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”表示 reduce 和任务分区号(即任务 ID)。例如,作业的第一个 map 文件生成的名称将为“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)

关于hadoop - 映射器输出中的零件文件是否代表拆分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34327579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com