洗牌阶段和合并阶段有什么区别?

jvlzgdj9  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(560)

我对mapreduce框架很困惑。从不同的渠道读到这个我都搞不懂。顺便说一下,这是我对mapreduce工作的想法

1. Map()-->emit <key,value>  
2. Partitioner (OPTIONAL) --> divide
    intermediate output from mapper and assign them to different
    reducers
3. Shuffle phase used to make: <key,listofvalues>    
4. Combiner,    component used like a minireducer wich perform some
    operations on    datas and then pass those data to the reducer.
    Combiner is on local    not HDFS, saving space and time.    
5. Reducer, get the data from the    combiner, perform further
    operation(probably the same as the    combiner) then release the
    output.     
6.  We will have n outputs parts,    where n is the number
    of reducers

基本上是对的?我的意思是,我发现一些资料表明,合路器是洗牌阶段,它基本上是分组的每个记录的关键。。。

dxxyhpgq

dxxyhpgq1#

组合器与洗牌阶段完全不同。你所描述的洗牌是错误的,这是你困惑的根源。
洗牌只是从Map中复制密钥来减少,它与密钥生成无关。它是减速机的第一阶段,另外两个阶段是分拣然后减速机。
组合就像在本地为每个Map器的输出执行一个reducer。它的作用基本上类似于一个reducer(它还扩展了reducer类),这意味着它与reducer一样,对Map程序为同一个键发出的本地值进行分组。
分区实际上是将map输出键分配给特定的reduce任务,但它不是可选的。用自己的实现重写默认hashpartitioner是可选的。
我试着尽量少回答这个问题,但是你可以在这本书中找到更多关于hadoop的信息:正如azim所建议的,由tomwhite编写的权威指南,以及一些相关的东西。

ulydmbyx

ulydmbyx2#

把combiner看作一个mini-reducer阶段,它只对每个节点内的map任务的输出起作用,然后再将其发送到实际的reducer。
以经典的wordcount为例,map任务处理的每个单词的map阶段输出都是(word,1)。假设要处理的输入是
“她住在印度一个大城市郊区的一栋大房子里,房子里有一个大车库”
如果没有组合器,map相位将发射(大,1)三次,(a,1)三次和(in,1)两次。但是当使用组合器时,map相位会发射(big,3),(a,3)和(in,2)。请注意,这些单词中的每个单词的单独出现都会在map阶段中进行局部聚合,然后才会发出输出以减少阶段。在使用合并器的用例中,它将进行优化,以确保由于本地聚合,从map到reduce的网络流量最小化。
在shuffle阶段,来自不同map阶段的输出被重定向到正确的reducer阶段。这是由框架内部处理的。如果使用了分区器,则将输入洗牌以相应地减少会很有帮助。

fv2wmkja

fv2wmkja3#

我不认为合并器是洗牌和排序阶段的一部分。组合器本身是作业生命周期的一个阶段(可选)。
这些阶段的流水线可以是:map-->partition-->combiner(可选)-->shuffle and sort-->reduce
在这些阶段中,map、partition和combiner操作在同一个节点上。hadoop根据资源的可用性和可访问性以最佳方式动态地选择要运行reduce阶段的节点。shuffle和sort是一个重要的中间层阶段,它在Map和reduce节点之间起作用。
当客户端提交作业时,Map阶段开始处理输入文件,该文件以块的形式跨节点存储。Map程序逐个处理文件的每一行,并将生成的结果放入100mb的内存缓冲区(每个Map程序的本地内存)。当这个缓冲区被填满到某个阈值时,默认情况下是80%,这个缓冲区被排序,然后存储到磁盘(作为文件)。每个Map器可以生成多个这样的中间排序的拆分或文件。当mapper处理完块的所有行时,所有这样的拆分被合并在一起(形成一个文件),排序(基于键),然后combiner phase开始处理这个文件。请注意,如果没有分区阶段,则只会生成一个中间文件,但在分区的情况下,会根据开发人员的逻辑生成多个文件。下图来自OreillyHadoop:权威指南,可以帮助您更详细地理解这个概念。

稍后,hadoop根据键值将合并文件从每个mapper节点复制到reducer节点。即同一个键的所有记录都将被复制到同一个节点。
我想,你可能对ss有深入的了解,减少了阶段性的工作,所以不必对这些主题进行更详细的讨论。
另外,要了解更多信息,我建议您阅读oreilly hadoop:权威指南。这是一本关于hadoop的很棒的书。

相关问题