Hadoop如何跨多个数据节点分发数据和mapreduce任务

时间:2017-08-13 20:17:12

标签: java hadoop mapreduce hdfs

我是hadoop的新手,我阅读了很多页面的hadoop mapreduce和hdfs,但仍然无法清除一个概念。

这个问题可能是愚蠢或不寻常的,如果不是那么抱歉。 我的问题是,假设我在hadoop中为一个大小为1 GB的文件创建了一个字数统计程序,其中map函数将每行作为输入并输出为键值对,reduce函数将输入 作为键值对,简单地迭代列表并计算一个单词在该文件中的总次数。

现在我的问题是,因为这个文件存储在多个数据节点的块中,并且map-reduce并行执行每个数据节点。假设我的文件存储在两个datanode上,第一个数据节点上的文件包含单词“hadoop”5次,第二个数据节点上的文件包含单词“hadoop”7次。所以基本上 整个地图缩小过程的输出将是:

hadoop的:7

的hadoop:5

因为2个map-reduce函数并行地在2个不同的数据节点上执行, 但输出应该是两个文件中“hadoop”字数的总和,即: hadoop的:13

那么我将如何实现这一点,或者我在这里错过了一些概念。请帮助我严重困扰这个概念,如果我无法让你明白我想问的话,我很抱歉。

2 个答案:

答案 0 :(得分:0)

我认为你完全错过了reducer的概念,因为它正是它的功能,reducer输入将是一个键(在这种情况下是hadoop)和一个与这个键相关的值列表(7和5),所以你的reducer程序将迭代值列表并进行求和,然后是hadoop,13。

答案 1 :(得分:0)

你可能已经读了许多Hadoop Mapreduce和HDFS 的页面,但是你似乎错过了在Map之后和Reduce之前包含舞台的那些页面,称为Shuffle and Sort。

基本上它的作用是,它将来自所有映射器的数据混洗,并将具有相同键的行以排序顺序发送到同一个reducer。因此,在您的情况下,hadoop 7hadoop 5都将使用相同的reducer,将其缩减为hadoop 12(不是13!)

您可以在网上轻松获得有关Shuffle和Sort的更多信息。您可以阅读questions like this too