2015-06-19 113 views
0

我刚开始研究hadoop,并在经历了一些挣扎之后让wordcount示例在群集(两个datanode)上工作。hadoop - 地图/减少功能

但我有一个关于Map/Reduce功能的问题。我在地图上看到,输入文件/数据被转换成另一种形式的数据,可以在缩减步骤中进行高效处理。

假设我有四个输入文件(input1.txt,input2.txt,input3.txt,input4.txt)并且想要读取输入文件并转换为另一种数据形式以减少。

所以这里是问题。如果我在集群环境(两个datanode)上运行应用程序(wordcount),这四个输入文件是在每个datanode上读取还是在每个datanode上读取两个输入文件?我该如何检查哪个文件在哪个datanode上读取?

还是映射(在每个datanode上)读取文件作为某种块而不是读取单个文件?

回答

0

请参阅hadoop基于块而不是文件工作。因此,即使所有四个文件都小于128MB(或64MB,取决于块大小),它们也只能由一个映射器读取。这个由映射器读取的块也称为InputSplit。我希望能回答你的问题。

+0

这是否意味着如果块大小较大(可能超过500MB),块是由映射器(提交给两个datanodes)读取的? – user826323

0

文件被分成块。块散布在群集中的数据节点上。块也被复制因子复制(默认为3),因此每个块可以位于多个节点上。调度程序决定在哪里运行映射器,取决于哪个数据节点可用于处理以及数据位于何处(数据局部性进入画面)。在你的程序(wordcount)中,每一行都被一个接一个地送到一个映射器(不是整个文件或块)。