博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MapReduce之知识整理
阅读量:5024 次
发布时间:2019-06-12

本文共 988 字,大约阅读时间需要 3 分钟。

MapReduce知识整理

MapReduce简介

MapReduce是一个用于处理海量数据的分布式计算框架,解决了(数据分布式存储,作业调度,容错,机器间通信等复杂问题)

MapReduce计算框架和执行流程

运行过程文字描述

1. Map任务处理

1.1 读取HDFS上的文件,每一行通过InputSplit解析成一个<k,v>,每个InputSplit都会分配一个Mapper任务,每个k,v会调用一次map函数。<line0, a b c c>,<line1, d e f>

1.2 覆盖map(),接收1.1的<k,v>,转换为新的<k,v>输出。<a,1>,<c,1>,<c,1>,<d,1>,<e,1>

1.2.1 上面的输出会先存放在缓存中,每个map都有一个环形内存缓冲区用于存储任务输出(默认大小100M,io.sort.mb属性指定),到达阈值0.8(io.sort.spill.percent)就溢写到指定的本地目录中

1.3 对1.2.1的输出溢写到磁盘前进行分区(partitioner),默认是一个分区,分区数量是根据reduce的数量来取模。<0,a,1>,<0,b,1>,<0,c,1>,<0,c,1>

1.4 分区后按照<k,v>中的k排序以及分组,分组是指相同key的value放到一个集合中。排序后:<a,1>,<b,1>,<c,1>,<c,1>,分组后:<a,{1}>,<b,{1}>,<c,{1,1}>

1.5 (可选)对分组后的数据进行归约,combiner

2. Reduce任务处理

2.1 多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点上进行shuffle

2.2 从map端复制过来的数据首先会写到reduce端的缓存中,缓存占用到达一定的阈值后会写到磁盘中进行partition、combine、排序等过程,如果形成了多个磁盘文件还会进行合并,最后一次合并的结果作为reduce的输入而不是写入到磁盘中。

2.3 最后一次合并的结果作为输入传入到reduce任务中,当reduce输入文件确定后,整个shuffle操作才算最终结束,之后就是reduce的计算,并把结果存到hdfs上

转载于:https://www.cnblogs.com/blogyuhan/p/9262517.html

你可能感兴趣的文章
oracle连接的三个配置文件(转)
查看>>
Vim配置文件(Vimrc)
查看>>
RecyclerView 局部刷新(获取viewHolder 去刷新)
查看>>
PHP表单(get,post)提交方式
查看>>
使用vbs或者bat脚本修改IE浏览器安全级别和选项
查看>>
Silverlight入门
查看>>
Silverlight动态调用WEBSERVICE,WCF方法
查看>>
LeetCode 895. Maximum Frequency Stack
查看>>
模仿segmentfault 评论
查看>>
一个简单的日志函数C++
查看>>
Java 8 中如何优雅的处理集合
查看>>
IOS程序的启动过程
查看>>
连接Linux下 XAMPP集成环境中部署的禅道的数据库MariaDB
查看>>
Java操作Excel和Word
查看>>
Oracle 体系结构之ORACLE物理结构
查看>>
ORA-12538: TNS: no such protocol adapter
查看>>
盒子模型
查看>>
局域网协议
查看>>
[HNOI2012]永无乡 线段树合并
查看>>
Spring整合hibernate:3、使用XML进行声明式的事务管理
查看>>