Hadoop如何在多个数据节点之间分配数据和mapreduce任务



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

可能是这个问题是愚蠢的或不可用的,如果是这样,那就太抱歉了。 我的问题是,假设我在Hadoop中为大小为1 GB的文件创建了一个字数统计程序,其中map函数将每行作为输入,输出为键值对,reduce函数将接受输入 作为键值对,只需迭代列出并计算单词进入该文件的总次数。

现在我的问题是,由于该文件以块的形式存储在多个数据节点上,并且map-reduce在每个数据节点上并行执行。假设我的文件存储在两个数据节点上,第一个数据节点上的文件包含单词"hadoop"5次,第二个数据节点上的文件包含单词"hadoop"7次。所以基本上 整个地图归约过程的输出将是:

哈杜普:7

哈杜普:5

由于 2 个 map-reduce 函数在 2 个不同的数据节点上并行执行, 但是输出应该是两个文件上"hadoop"字计数的总和,即: 哈杜普:13

那么我将如何实现这一目标,或者我在这里错过了一些概念。请帮助我严重坚持这个概念,如果我无法让您理解我想问的问题,我感到非常抱歉。

你可能已经读过很多Hadoop Mapreduce和HDFS的页面,但你似乎错过了在Map之后和Reduce之前包含阶段的页面,称为Shuffle and Sort。

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

您可以在 Web 上轻松获取有关随机播放和排序的更多信息。您也可以阅读此类问题。

我认为您完全错过了化简器的概念,因为这正是它的功能,化简器输入将是一个键(在本例中为 hadoop(和与此键关联的值列表(7 和 5(,因此您的化简器程序将迭代值列表并进行求和,然后是 hadoop,13。

最新更新