Java 是否需要Hadoop MapReduce RecordReader实现?

Java 是否需要Hadoop MapReduce RecordReader实现?,java,hadoop,mapreduce,input-split,recordreader,Java,Hadoop,Mapreduce,Input Split,Recordreader,从Hadoop MapReduce接口上的Apache文档: “[L]基于输入大小的逻辑拆分对于许多人来说是不够的 应尊重自记录边界起的应用程序。在这种情况下 在这种情况下,应用程序还必须在 谁有责任尊重记录边界并提交 以记录为导向的个人逻辑系统视图 任务。” 示例应用程序是否基于输入大小的逻辑拆分不足?如果是这样,在源代码中哪里找到了RecordReader的实现?在WordCount示例中,您无法看到RecorderReader实现,因为它使用框架中指定的默认RecordReader和默认I

从Hadoop MapReduce接口上的Apache文档:

[L]基于输入大小的逻辑拆分对于许多人来说是不够的 应尊重自记录边界起的应用程序。在这种情况下 在这种情况下,应用程序还必须在 谁有责任尊重记录边界并提交 以记录为导向的个人逻辑系统视图 任务。”


示例应用程序是否基于输入大小的逻辑拆分不足?如果是这样,在源代码中哪里找到了RecordReader的实现?

在WordCount示例中,您无法看到RecorderReader实现,因为它使用框架中指定的默认RecordReader和默认InputSplit

如果您想查看它们的实现,可以在Hadoop源代码中找到


有关记录器读取器及其工作方式的更多信息,请参见:

输入拆分是对数据的逻辑引用。如果你看一下,你会发现它对记录边界一无所知。为每个输入拆分启动一个映射器。映射程序的
map()
针对每个记录(在WordCount程序中,文件中的每一行)运行

但是制图员怎么知道记录边界在哪里呢

这就是您引用Hadoop MapReduce接口的地方-

应用程序还必须实现一个RecordReader,该RecordReader上有 负责遵守记录边界并提交 逻辑输入拆分到单个任务的面向记录的视图

每个映射器都与InputFormat关联。
InputFormat
包含要使用的
RecordReader
的信息。查看,您会发现它知道输入拆分以及要使用的记录读取器。 若你们想知道更多关于输入拆分和记录阅读器的信息,你们应该阅读答案

RecordReader
定义了记录边界;
InputFormat
定义了所使用的
RecordReader

WordCount程序没有指定任何
InputFormat
,因此默认为
TextInputFormat
,它将每一行作为不同的记录使用并发出。还有你的源代码


[五十] 基于输入大小的逻辑拆分对于许多应用程序来说是不够的 应遵守记录边界后的应用程序

这意味着,例如

a b c d e
f g h i j
k l m n o
我们希望每一行都能成为记录。当逻辑拆分基于输入大小时,可能有两个拆分,例如:

a b c d e
f g 

如果没有
RecordReader
,它会认为
fg
hij
是不同的记录;显然,这不是大多数应用程序想要的

回答您的问题,在WordCount程序中,记录边界是什么并不重要,但有可能相同的单词被拆分为不同的逻辑拆分。因此,基于大小的逻辑拆分对于WordCount程序来说是不够的

每个MapReduce程序都“尊重”记录边界。否则,它没有多大用处

    h i j 
k l m n 0