MapReduce过程详细分析
Shuffle产生的意义是什么?
Shuffle过程的期望可以有:
完整地从map task端拉取数据到reduce 端。
在跨节点拉取数据时,尽可能地减少对带宽的不必要消耗。
减少磁盘IO对task执行的影响。
每个map task都有一个内存缓冲区,存储着map的输出结果,当缓冲区快满的时候需要将缓冲区的数据该如何处理?
每个map task都有一个内存缓冲区,存储着map的输出结果,当缓冲区快满的时候需要将缓冲区的数据以一个临时文件的方式存放到磁盘,当整个map task结束后再对磁盘中这个map task产生的所有临时文件做合并,生成最终的正式输出文件,然后等待reduce task来拉数据。
MapReduce提供Partitioner接口,它的作用是什么?
MapReduce提供Partitioner接口,它的作用就是根据key或value及reduce的数量来决定当前的这对输出数据最终应该交由哪个reduce task处理。默认对key hash后再以reduce task数量取模。默认的取模方式只是为了平均reduce的处理能力,如果用户自己对Partitioner有需求,可以订制并设置到job上。
什么是溢写?
在一定条件下将缓冲区中的数据临时写入磁盘,然后重新利用这块缓冲区。这个从内存往磁盘写数据的过程被称为Spill,中文可译为溢写。
溢写是为什么不影响往缓冲区写map结果的线程?
溢写线程启动时不应该阻止map的结果输出,所以整个缓冲区有个溢写的比例spill.percent。这个比例默认是0.8,也就是当缓冲区的数据已经达到阈值(buffer size * spill percent = 100MB * 0.8 = 80MB),溢写线程启动,锁定这80MB的内存,执行溢写过程。Map task的输出结果还可以往剩下的20MB内存中写,互不影响。
当溢写线程启动后,需要对这80MB空间内的key做排序(Sort)。排序是MapReduce模型默认的行为,这里的排序也是对谁的排序?
当溢写线程启动后,需要对这80MB空间内的key做排序(Sort)。排序是MapReduce模型默认的行为,这里的排序也是对序列化的字节做的排序。
溢写过程中如果有很多个key/value对需要发送到某个reduce端去,那么如何处理这些key/value值?
如果有很多个key/value对需要发送到某个reduce端去,那么需要将这些key/value值拼接到一块,减少与partition相关的索引记录。
哪些场景才能使用Combiner呢?
Combiner的输出是Reducer的输入,Combiner绝不能改变最终的计算结果。所以从我的想法来看,Combiner只应该用于那种Reduce的输入key/value与输出key/value类型完全一致,且不影响最终结果的场景。比如累加,最大值等。Combiner的使用一定得慎重,如果用好,它对job执行效率有帮助,反之会影响reduce的最终结果。
Merge的作用是什么?
最终磁盘中会至少有一个这样的溢写文件存在(如果map的输出结果很少,当map执行完成时,只会产生一个溢写文件),因为最终的文件只有一个,所以需要将这些溢写文件归并到一起,这个过程就叫做Merge
每个reduce task不断的通过什么协议从JobTracker那里获取map task是否完成的信息?
每个reduce task不断地通过RPC从JobTracker那里获取map task是否完成的信息
reduce中Copy过程采用是什么协议?
Copy过程,简单地拉取数据。Reduce进程启动一些数据copy线程(Fetcher),通过HTTP方式请求map task所在的TaskTracker获取map task的输出文件。
reduce中merge过程有几种方式?
merge有三种形式:1)内存到内存 2)内存到磁盘 3)磁盘到磁盘。默认情况下第一种形式不启用,让人比较困惑,是吧。当内存中的数据量到达一定阈值,就启动内存到磁盘的merge。与map 端类似,这也是溢写的过程,这个过程中如果你设置有Combiner,也是会启用的,然后在磁盘中生成了众多的溢写文件。第二种merge方式一直在运行,直到没有map端的数据时才结束,然后启动第三种磁盘到磁盘的merge方式生成最终的那个文件。
本文转自 ChinaUnicom110 51CTO博客,原文链接:http://blog.51cto.com/xingyue2011/1951558
MapReduce过程详细分析相关推荐
- MOSFET导通、关断过程详细分析、损耗分析、米勒效应、datasheet解释
一,MOSFET导通.关断过程详细分析(转)详见下 MOSFET导通.关断过程详细分析(转) - 知乎 二,弄懂mosfet的导通过程和损耗分析 详见下 弄懂MOS管的导通过程和损耗分析 三.MOS ...
- Tip in/Out变速箱齿轮敲击过程详细分析
Tip in/Out变速箱齿轮敲击过程详细分析(模型由AMEsim例子改造而成,数据均虚构,仅学习用) 1.发动机稳态工况 2.Tip in/Out工况 3.总结 1.发动机稳态工况 发动机输出力矩: ...
- http 协议的交互过程详细分析。
http 协议的交互过程详细分析. 以wget <file> wireshark 抓包分析. 在<netinet/ip.h> 中,有如下定义 struct iphdr { ...
- IMX6Q 启动过程详细分析
一.预览 本文主要对IMX6Q的启动过程进行分析,主要参考文档来自NXP官方文档IMX6DQRM.pdf,使用的uboot为NXP官方提供uboot-imx,使用的开发板为迅为iTOP-i.MX6.N ...
- uClinux 启动过程详细分析
uclinux启动的详细过程有着诸多的信息可以给我们巨大的启发,我们在这里讨论的就是要对这些信息做一个具体细致的分析,通过我们的讨论,大家会对uclinux启动过程中出现的.以前感觉熟悉的.但却又似是 ...
- SSL/TLS(4): TLS连接握手过程详细分析
SSL/TLS(1):基本概念通俗解释 SSL/TLS (2):通俗解释SSL/TLS为什么安全 SSL/TLS(3): CA证书解释 前言 在前面的文章中,我们讲述了SSL/TLS相关概念和CA证书 ...
- Hive map阶段缓慢,优化过程详细分析
背景 同事写了这样一段HQL(涉及公司数据,表名由假名替换,语句与真实场景略有不同,但不影响分析): CREATE TABLE tmp AS SELECT t1.exk, t1.exv, M.make ...
- Linux系统开机过程详细分析
各位是否曾经对电脑整个开机的流程感到好奇呢 ? 这一次 , 我们所要讨论的 主题 , 就是 Linux 从开机的一瞬间到 login 为止 , 到底发生了什么事情 ? 想必各位都知道 , 在刚开机时 ...
- Linux开机启动过程详细分析
from: http://www.linuxidc.com/Linux/2007-11/8701.htm 由于操作系统正在变得越来越复杂,所以开机引导和关机下电的过程也越来越智能化.从简单的DOS系统 ...
最新文章
- MapReduce 中 UDF、UDAF、UDTF
- PHP PDO 连接SQLSErver,PHP 使用 PDO 方式连接 sqlserver ,拼接 的 sql 命令总是报错
- go run/ go install/ go build / go get的区别
- ETH之Solidity:Solidity的简介、安装、使用方法之详细攻略
- socket的系统调用
- 从大学生到职场人,一段深刻的思维认知升级补丁
- 【转载保存】ExecutorService中submit和execute的区别
- 2020年Java实训项目【GUI学生信息管理系统】目录
- 力扣 278.第一个错误的版本
- SpringBoot2.0使用Spring WebFlux之HelloWord篇
- linux中红帽系统下载地址,Redhat8.3系统下载
- 开发与测试的相爱相杀
- tp5.1 保利威视 云课堂 三分屏 PC直播DEMO(不适合普通直播)
- iOS开发之3D Touch(快速添加3D Touch功能)
- HDCP Key工作原理
- Collection集合层次结构图
- 我家的三个犹太小富豪
- MiniJavaVM——一个Java虚拟机的设计和实现
- HTML爱心照片墙源码
- 如何用python制作小游戏
热门文章
- @service注解_Spring 中 @Component、@Service 等注解如何被解析的
- html实现让电脑断网的功能,13. Electron 断网提醒功能的实现
- oracle11g 多了个 client,Oracle10g Client Oracle11g DB同时安装发生OCI Error
- oracle10默认备份路径,oracle 10g RMAN备份及恢复
- php 获取所有表,php – 获取所有插件的列表
- java中可用于定义成员常量_13秋北航《Java语言与面向对象程序设计》在线作业三辅导 …...
- php 对数据转换成tree,PHP 把返回的數據集轉換成Tree樹
- 检测DTMF信号中的时间间隔
- 深度跑车 - DeepRacer
- html移动端隐藏代码,html Css PC 移动端 公用部分样式代码整理