繁体   English   中英

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

[英]How Hadoop distribute data and mapreduce task across multiple data nodes

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

如果是这样的话,那么这个问题可能是愚蠢的或毫无用处的。 我的问题是,假设我在hadoop中为文件大小为1 GB的文件创建了一个字计数程序,其中map函数将每一行作为输入,并作为键值对输出,而reduce函数将输入作为键-值对,然后简单地迭代列表并计算单词在该文件中出现的总次数。

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

Hadoop的:7

Hadoop的:5

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

因此,我将如何实现这一目标,或者我是否在这里缺少一些概念。请帮助我,我对这个概念一无所知,如果无法让您理解我要问的问题,我深感抱歉。

我认为您完全缺少了reducer的概念,因为那恰好是reducer的功能,reducer的输入将是一个键(在这种情况下为hadoop)和与此键关联的值列表(7和5),因此您的reducer程序将迭代值列表,进行求和,然后进行hadoop,13。

您可能已经阅读了Hadoop Mapreduce和HDFS的许多页面,但是您似乎错过了包含Map之后和Reduce之前的阶段(即Shuffle和Sort)的页面。

基本上,它是从所有映射器中清除数据,然后将具有相同键的行按排序顺序发送到相同的reducer。 因此,在您的情况下, hadoop 7hadoop 5都将使用同一减速器,从而将其减小到hadoop 12 (不是13!)。

您可以在网络上轻松获得有关随机播放和排序的更多信息。 也有类似问题 ,您可以阅读。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM