什么是确切的map reduce工作流?

f87krz0w  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(300)

“hadoop权威指南-tom white”一书的摘要是:
用户的map函数和用户的reduce函数之间的所有逻辑都称为shuffle。然后,在map和reduce之间切换。在用户的map()函数之后,输出在内存循环缓冲区中。当缓冲区已满80%时,后台线程开始运行。后台线程将缓冲区的内容输出到溢出文件中。此溢出文件按键进行分区。在每个分区内,键值对按键排序,排序后,如果启用了combiner函数,则调用combiner函数。所有溢出文件将合并到一个mapoutputfile中。所有map任务的mapoutputfile都将通过网络收集以减少任务。reduce任务将执行另一种排序。然后调用用户的reduce函数。
所以问题是:
1.)根据上述总结,这是流程:
Map器——partioner——sort——combiner——shuffle——sort——reducer——输出
1a)这是流程还是其他流程?
1b.)你能用一个例子来解释上面的流程吗?比如单词计数的例子(我在网上找到的那些没有那么详细)?
2.)那么mappers阶段输出是一个大文件(mapoutputfile)?就是这个大文件被分解成键-值对,然后传递到相应的缩减器上?
3.)当数据已经被排序并在传递到各自的减速机上时进行组合时,为什么还要进行第二次排序?
4.)假设mapper1在datanode1上运行,那么reducer1有必要在datanode1上运行吗?或者它可以在任何数据节点上运行?

oipij1gg

oipij1gg1#

回答这个问题就像改写了整个历史。您的很多疑问都与操作系统概念有关,而不是mapreduce。
Map器数据写入本地文件系统。数据是根据减速机的数量进行分区的。在每个分区中,根据溢出发生的时间,可以有多个文件。
给定分区中的每个小文件都会被排序,就像写入文件之前一样,内存中的排序也会完成。
为什么需要在Map器端对数据进行排序?a、 数据在Map器端进行排序和合并,以减少文件数量。b、 文件被排序,因为在reducer上不可能收集给定键的所有值。
在reducer上收集数据之后,首先需要减少系统上的文件数量(记住ulimit对每个用户都有一个固定数量,在本例中是hdfs)
reducer只是在一小部分已排序的文件上维护一个文件指针,并对它们进行合并。
欲了解更多有趣的想法,请参考:http://bytepadding.com/big-data/map-reduce/understanding-map-reduce-the-missing-guide/

相关问题