浅谈MapReduce的shuffle机制

  Map Reduce是一个计算框架。Map函数发送到所有含有涉及数据的节点上运行,而Reduce之运行在多台主机上用作收集map结果用,reduce数量取决于reduce收集函数分了几个组,只在几个几个节点上运行。

shuffle机制:分组排序

MapReduce执行过程

  • map进程数量基于切片思想,一个切片对应一个map进程,切片大小相对块大小而言,块小切片对应的块数量多,切片是文件中偏移量的范围。
  • 计算分好的split切片交付给map进程后,先在内存中处理,每用满一次缓存,将缓存内容输出成一个溢出文件,每个文件的数据都局部组间有序。
  • 当输入数据被处理完,将当前map进程所产生的溢出文件合并成大文件(按组号合并,保持组间有序)。
  • 当任意map进程完成汇总同时,reduce进程开始收集大文件,从各个map收集每个大文件的同组号数据进行归并排序。
  • 最终一个reduce进程输出一个完好的分好类的排好序的同组数据。
  • MR中由于数据量可能超出缓存大小,可能要频繁写入磁盘文件,所以MR往往要比spark、storm慢,但也正因为与磁盘进行交互,MR能处理的数据量级更大,在离线非实时计算中很难被替代。

shuffle机制

  1. Yarn的ResourceManager将计算资源分配好后,将启动NodeManager节点中一个节点的MRAppMaster进程,而mapreduce的shuffle机制在这里开始。
  2. MRAppMaster进程根据切片数量确定Map节点的个数,并启动这些节点上的map task,这些task将处理本机上的分片数据,并将分组结果保存在map主机的内存缓冲区(当内存缓冲满时,自动溢出到磁盘中,根据配置文件配置可能生成多个小文件,缓冲区及小文件局部有序),并在这之后将小文件合并成一个大文件,在大文件的合并过程中依旧保持排序
  3. map task进程将任务完成后,会向MRAppMaster报告结果,一并汇报任务状态、结果文件位置、分组信息等
  4. MRAppMaster进程接收到所有map task的反馈结果,将启动一些节点上的reduce task进程,同时只对每一个reduce授予不同的reduce号,告知取哪个组的数据、数据文件在哪,主机等等
  5. reduce得到信息后去目标位置下载数据,当然只取相应的那个组的数据,其余组的数据由其他reduce取走
  6. reduce合并从各个map取来的相同组数据,并保持排序
  7. reduce逻辑处理合并的集合
  8. 输出结果,job完成
  9. MRAppMaster向ResourceManager注销,job彻底结束,Yarn接管

原文地址:https://www.cnblogs.com/fusiji/p/11409919.html

时间: 2024-10-11 01:24:18

浅谈MapReduce的shuffle机制的相关文章

浅谈mapreduce程序部署

尽管我们在虚拟机client上能非常快通过shell命令,进行运行一些已经封装好实例程序,可是在应用中还是是自己敲代码,然后部署到server中去,以下,我通过程序进行浅谈一个程序的部署过程. 在启动Hadoop之后,然后把程序达成可运行的jar包,并把对应的第三方jar包 包括进去.运行hadoop    jar   XXX. +驱动名称. package com.mapred; import java.io.IOException; import java.io.PrintStream; i

浅谈Android 事件分发机制(一)

在上一篇文章中,浅谈Android 事件分发机制(一),简要分析了一下事件分发机制的原理,总结一下就是事件层层传递,直到被消费,原理看似简单,但是在实际使用过程中,场景各不相同,复杂程度也就因产品而异,这篇文章就通过给view加移动来模拟事件分发. 触摸事件 这里涉及到几个与手指触摸相关的常见事件: 坐标系对于单指触控移动来说,一次简单的交互流程是这样的:手指落下(ACTION_DOWN) -> 移动(ACTION_MOVE) -> 离开(ACTION_UP) 坐标系 Android坐标系以手

浅谈浏览器的缓存机制

浏览器的缓存可分为HTTP缓存和离线缓存,下面将分别介绍 HTTP缓存 只有GET请求能被缓存,POST不能被缓存.Modified Time/ETag/Expires/Cache都是HTTP协议的缓存策略 先来一个例子 当我们第二次访问百度首页,在Chrome的Network面板中打开一个静态文件时会发现响应的status是:200 OK (from disk cache),不是应该返回304 Not Modified吗?如果你知道答案,那就可以忽略本文了. Cache-Control 简介

MapReduce的Shuffle机制

map阶段处理的数据如何传递给reduce阶段,是MapReduce框架中最关键的一个流程,这个流程就叫shuffle. shuffle: 洗牌.发牌——(核心机制:数据分区,排序,合并). shuffle是Mapreduce的核心,它分布在Mapreduce的map阶段和reduce阶段.一般把从Map产生输出开始到Reduce取得数据作为输入之前的过程称作shuffle. Collect阶段:将MapTask的结果输出到默认大小为100M的环形缓冲区,保存的是key/value,Partit

浅谈Spark内部运行机制

Spark中最重要的机制有那些? 1.RDD,2.Spark调度机制,3Shuffle过程 什么是RDD? 可以这么说,你懂了RDD,基本上就可以对Hadoop和Spark的一半给吃透了,那么到底是RDD RDD(弹性分布式数据集)首先体现数据集,RDD是对原始数据的封装,该种数据结构内部可以对数据进行逻辑分区,其次分布式体现是并行计算以及需要解决容错问题,也就是根据依赖,找到第一层RDD,最后根据RDD编号与分区编号,可以唯一确定该分区对应的块编号,就能从存储介质中提取出分区对应的数据.在就是

浅谈MapReduce编程模型

以Wordcount程序为例,简单描述MapReduce程序的编程模型. MapReduce程序组成 MapReduce程序一般分成三个部分: 一个程序主引导部分: 一个Map程序部分: 一个Reduce部分. 主引导部分用来设置MapReduce(以下简称 “ MR” )程序的一些非业务逻辑属性,例如最终生成jar包时指定MR框架执行该程序的入口.MR程序的map和reduce部分是哪个(一个jar包中可能封装了多个程序).map和reduce部分的输出参数类型.输入数据的来源(路径)和输出数

浅谈JVM-图解类加载机制

一.目录 二.类加载机制流程 1.什么是类加载机制? JVM把class文件加载到内存里面,并对数据进行校验.准备.解析和初始化,最终能够被形成被JVM可以直接使用的Java类型的过程. 2.类加载流程图 3.加载 将class文件加载在内存中. 将静态数据结构(数据存在于class文件的结构)转化成方法区中运行时的数据结构(数据存在于JVM时的数据结构). 在堆中生成一个代表这个类的java.lang.Class对象,作为数据访问的入口. 4.链接 链接就是将Java类的二进制代码合并到jav

浅谈linux读写同步机制RCU

RCU是linux系统的一种读写同步机制,说到底他也是一种内核同步的手段,本问就RCU概率和实现机制,给出笔者的理解. [RCU概率] 我们先看下内核文档中对RCU的定义: RCU is a synchronization mechanism that was added to the Linux kernel during the 2.5 development effort that is optimized for read-mostly situations. 翻译:RCU是在2.5版本

ios开发新手浅谈强大的runtime机制

runtime机制,实际上是一套底层的C语言代码,里面提供了很多的C数据类型和一些功能强大的C语言函数.我们所写的OC代码,在底层都是基于runtime来实现的.所以我们可以说OC实际就是披着面向对象外衣的C语言,因为在运行时,OC代码会编译成C/C++ 来运行.runtime中有很多的C函数,有着很强大的功能,比如 : 1. 能动态类的增删改 成员变量,方法 2.IOS Swizzle 能底层动态的交换两个方法(类方法和对象方法)的实现 IOS swizzle的具体做法: 1.在分类的load