mapreduce过程解析
2015-08-04 14:48
204 查看
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()函数进行处理。
将获取到的数据分片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()函数进行处理。
相关文章推荐
- C#动态操作DataTable(新增行、列、查询行、列等)
- JSONKIT isa错误的解决办法
- 用js编写的简单的计算器代码程序
- Jetty和tomcat的比较
- 1035. Password (20)
- KVC与KVO
- Android屏幕适配
- shell 统计nginx访问日志的前10
- AndroidStudio虚拟机启动失败
- Android BatteryStatsHelper深入理解(and5.1)
- 修饰符、多态
- 牛腩新闻发布系统——文档是前进的指明灯
- 【leetCode】Lowest Common Ancestor of a Binary Tree
- c++ 构造/析构default之蛋蛋
- django学习笔记之开发功能之前的准备
- 针对不同的屏幕加载样式表
- C语言函数调用栈一
- Tomcat的基本配置
- socket bad address 错误的解决
- Linux上手动编译apache