瑞安做网站,wordpress网站界面设计,wordpress影音,wordpress网页模板一、Map过程解析 Read阶段#xff1a;MapTask通过用户编写的RecordReader#xff0c;从输入的InputSplit中解析出一个个key/value。Map阶段#xff1a;将解析出的key/value交给用户编写的Map()函数处理#xff0c;并产生一系列的key/value。Collect阶段#xff1a;在用户编…一、Map过程解析 Read阶段MapTask通过用户编写的RecordReader从输入的InputSplit中解析出一个个key/value。Map阶段将解析出的key/value交给用户编写的Map()函数处理并产生一系列的key/value。Collect阶段在用户编写的map()函数中数据处理完成后一般会调用outputCollector.collect()输出结果在该函数内部它会将生成的key/value分片通过调用partitioner并写入一个环形缓冲区该环形缓冲区的大小为100M Spill阶段即”溢写“当缓冲区快要溢出时默认达到缓冲区大小的80%会在本地文件系统创建一个溢写文件将该缓冲区的数据写入到这个文件。Combine阶段当所有的数据处理完成以后MapTask会对所有临时文件进行一次合并以确保最终只会生成一个数据文件。 将数据写入本地磁盘前先要对数据进行一次本地排序并在必要时对数据进行合并、压缩等操作。 写入磁盘之前线程会根据 ReduceTask 的数量将数据分区一个 Reduce 任务对应一个分区的数据。 这样做的目的是为了避免有些 Reduce 任务分配到大量数据而有些 Reduce 任务分到很少的数据甚至没有分到数据的尴尬局面。 如果此时设置了 Combiner 将排序后的结果进行 Combine 操作这样做的目的是尽可能少地执行数据写入磁盘的操作。 二、ReduceTask Copy阶段Reduce会从各个MapTask上远程复制一片数据每个MapTask传来的数据都是有序的并针对某一片数据如果其大小超过一定阈值则写到磁盘上否则直接放到内存中Merge阶段在远程复制数据的同时ReduceTask会启动两个后台进程分别对内存和磁盘上的文件进行合并以防止内存使用过多或者磁盘文件过多Sort阶段用户编写reduce()方法输入数据是按key进行聚集的一组数据Reduce阶段对排序后的键值对调用reduce()方法键相等的键值对调用一次reduce()方法每次调用会长生零个或者多个键值对最后把这些输出的键值对亵渎到hdfs上Write阶段reduce()函数将计算结果写到HDFS上。