所以这总是困惑我。我不确定map-reduce是如何工作的,而且我似乎迷失在确切的事件链中。
我的理解:
我想总结一下,我只是不知道如何正确地重新组合文件并导致我的map-reduce逻辑失败。
答案 0 :(得分:2)
步骤3称为“随机播放”。它是map reduce框架的主要增值之一,尽管对于大型数据集来说它也非常昂贵。该框架对所有映射器输出的完整记录集执行类似于GROUP BY操作的操作,然后使用每组记录调用reducer。回答3的个人问题:
3.1。想象一下,您的工作配置为 r 总减速器。该框架将每个地图输出文件分割成 r 个部分,并将每个部分发送到一个reducer任务。使用 m 总映射器,即 mr 小片飞来飞去。当特定的reducer收到它需要的所有切片时,它将它们全部合并在一起并按K2键对结果进行排序,然后通过该键对记录进行分组,以便对reduce()进行单独调用。如果存在重复的K2键,则该组将大于单个。事实上,这就是重点。如果您的地图制作者没有输出相同的密钥,那么您的算法甚至不需要减少阶段,您可以完全跳过昂贵的洗牌。
3.2。执行所有数据移动的负载分布在整个集群中,因为每个reducer任务都知道它想要的输出并从每个映射器请求它们。主节点唯一要做的就是坐标,即,告诉每个减速器什么时候开始拉动映射器输出,监视死节点,并跟踪每个人的进度。
3.3。减速器输出不由框架检查或以任何方式组合。然而,你有许多减速器任务( r ),那就是你将获得多少具有K3,V3记录的输出文件。如果需要再次组合,请在该输出上运行另一个作业。
答案 1 :(得分:1)
在读到这个答案之前,请花点时间阅读有关合并排序(分而治之的方法)
以下是框架
背后发生的一整套动作客户提交mapreduce作业。正在进行职位提交
JobTracker计算出拆分的位置,并生成靠近拆分的映射器,地点的优先级为(1.本地数据,2。本地机架,3。本地网络跳跃)
< / LI>Mappers读取数据(由FileInputFormat提供的Record Readers)并生成k1-&gt; v1
此数据在本地保存到映射器运行的本地文件系统中,这里的技巧是保存在localfilesystem上的数据为“SORTED”并存储在分区中(等于reducers的数量)
5。每个reducer从其对应的分区中提取映射器中的数据(不要忘记对reducer提取的所有数据进行排序)
{
k1->v1
k1->v2
K2->v3
}
Reducer打开文件夹到从映射器中提取的所有已排序文件并合并它们。 (合并时使用组和排序比较器)当合并从排序文件发生时,reducer的输出被排序并保存到hdfs
此步骤有点类似于合并排序“合并步骤”
请浏览http://bytepadding.com/big-data/map-reduce/understanding-map-reduce-the-missing-guide/以获取相同
的图片