Map端的Shuffle过程:
1. 输入数据
• 一个Map任务处理一个分片,每个输入分片会让一个Map 任务来处理
• Map输出的结果会暂时放在一个默认大小为100 M的环形内存缓冲区中。
• 当达到缓冲区大小的80%时,进行溢写,会在本地文件系统中创建一个溢出文件,将该缓冲区中的数据写入这个文件。
2. 溢写(分区、排序、合并)
• 根据Reduce 任务的数目将数据划分为相同数目的分区,一个Reduce任务对应一个分区的数据
• 对每个分区中的数据进行排序
• 如果此时设置了Combiner 函数定义的合并操作,则会将排序后的结果进行合并(合并不能改变最终结果,只是减少的数据写入磁盘)
链接器的工作分3个步骤:
1、将代码和数据模块象征性地放入内存。
2、决定数据和指令标签的地址。
3、修补内部和外部引用。
链接器使用每个目标模块中的重定位信息和符号表,来解析所有未定义标签。这种引用发生在分支指令、跳转指令和数据寻址处,所以这个程序的工作非常像一个编辑器:它寻找所有旧地址并用新地址取代它们:编辑是“链接编辑器”或链接器名字的简称。采用链接器的原因是修补代码比重新编译和汇编要快得多。
如果所有外部引用都解析完,链接器接着决定每个模块将要占用的内存位置。MlIPS在内存中为程序和数据分配空间的方式。因为文件是单独汇编的,所以汇编器不可能知道该模块的指令和数据相对于其他模块而言将会被放到哪里。当链接器将一个模块放到内存中的时候,所有绝对引用(absolute reference),即与寄存器无关的内存地址必须重定位以反映它的真实地址。
Copyright 2015-2022 财富赢家网版权所有 联系邮箱:920 891 263@qq.com