mapreduce过程解析
来源:互联网 发布:剑网3李白捏脸数据 编辑:程序博客网 时间:2024/06/06 20:58
mapreduce过程解析(mapreduce采用的是sort-based shuffle)
- 将获取到的数据分片partition进行解析,获得k/v对,之后交由map()进行处理.
- map函数处理完成之后,进入collect阶段,对处理后的k/v对进行收集,存储在内存的环形缓冲区中。
- 当环形缓冲区中的数据达到阀值之后(也可能一直没有达到阀值,也一样要将内存中的数据写入磁盘),将内存缓冲区中的数据通过SpillThread线程转移到磁盘上。需要注意的是,转移之前,首先利用快排对记录数据进行排序(原则是先按照分区编号,再按照key进行排序,注意,排序是在写入磁盘之前的)。之后按照partition编号,获取上述排序之后的数据并将其写入Spill.out文件中(每一个分区的内容都对应到磁盘中的一个Spill.out文件),需要注意的是,如果人为设置了combiner,在写入文件之前,需要对每个分区中的数据进行聚集操作。该文件同时又对应SpillRecord结构(Spill.out文件索引)。
map的最后一个阶段是merge:该过程会将每一个Spipll.out文件合并成为一个大文件(该文件也有对应的索引文件),合并的过程很简单,就是将多个Spill.out文件的在同一个partition的数据进行合并。(第一次聚合)
shuffle阶段。首先要说明的是shuffle阶段有两种阀值设置。第一,获取来自map的结果数据的时候,根据数据大小自然划分到内存或者是磁盘(这种阀值的设置跟map阶段完全不同);第二,内存和磁盘能够保存的文件数目有阀值,超出阀值,会对文件进行merge操作,即小文件合并成为大文件。Shuffle过程:
1)获取完成的Map Task列表。
2)进行数据的远程拷贝(http get的方法),根据数据文件的大小自然划分到内存或者是磁盘。
3)当内存或者磁盘的文件角度时,进行文件合并。(第二次聚合)reduce之前需要进行Sort操作,但是两个阶段是并行化的,Sort在内存或者磁盘中建立小顶堆,并保存了指向该小顶堆根节点的迭代器,同时Reduce Task通过迭代器将key相同的数据顺次讲给reduce()函数进行处理。
0 0
- MapReduce过程解析
- mapreduce过程解析
- Hadoop MapReduce过程 源代码解析
- MapReduce过程详细解析和使用
- mapreduce过程解析及任务调度问题
- mapreduce过程
- MapReduce过程
- mapreduce过程
- mapreduce过程
- Hbase数据解析mapreduce过程及遇到的问题
- HiveSQL解析原理:包括SQL转化为MapReduce过程及MapReduce如何实现基本SQL操作
- HiveSQL解析原理:包括SQL转化为MapReduce过程及MapReduce如何实现基本SQL操作
- HiveSQL解析原理:包括SQL转化为MapReduce过程及MapReduce如何实现基本SQL操作
- mapreduce与Spark的map-Shuffle-reduce过程 mapreduce过程解析(mapreduce采用的是sort-based shuffle) 将获取到的数据分片partit
- MapReduce处理过程笔记
- MapReduce:详解Shuffle过程
- MapReduce执行过程
- MapReduce:详解Shuffle过程
- python 中del 的用法
- C#动态操作DataTable(新增行、列、查询行、列等)
- KVC与KVO
- linux下挂载fat32格式的存贮设备不能创建大写文件夹或者磁盘中的原来的大写文件夹变成小写
- ssh免密码登录
- mapreduce过程解析
- Jetty与tomcat的比较
- 【Unity技巧】Unity中的优化技术
- 【碎碎念】今天服务器又down了……
- JSP三秒自动跳转到另一页
- Android初学习 - 4.0以后支持的Switch按钮
- jquery mobile常用的data-role类型介绍
- MapReduce过程、Spark和Hadoop以Shuffle为中心的对比分析
- Jetty和Tomcat的选择:按场景而定