2022-11-17
数据 文件 键值 进行
Map阶段
MapTask进程启动之后,会根据对应的输入分片来处理数据,每一个分片分配一个MapTask来处理。
使用客户端指定的InputFormat来读取数据,常用的就是LineRecordReader对象。它会逐行读取分片中的数据,并形成一个键值对。键为行偏移量,值为行记录。我们通常称为
将读取到的键值对数据输入到map方法中,进行用户自己的逻辑处理。并输出键值对,我们称为
map方法输出的键值对,会被搜集进环形缓冲区。环形缓冲区是内存中的一个字节数组,默认的大小是100M。
当环形缓冲区中被写入了80%的数据的时候,会将这80%的部分进行分区、排序,并溢写到磁盘,生成一个文件。在这个过程中,如果上游还有数据产生,将存储在剩余的20%的空间内。如果上游产生数据的速度非常快,剩余的20%也被填充满,并且80%的数据还没有溢写完成,此时任务将阻塞,上游不再读取数据,直到溢写文件完成。最终可能会生成多个溢写的磁盘文件。
将每一个溢写的磁盘文件合并成为一个文件,在合并的过程中,依然会按照分区、Key进行排序。最终,每一个MapTask生成一个磁盘文件。至此,MapTask执行结束。
Reduce阶段
每一个ReduceTask需要去处理一个分区的数据,因此ReduceTask需要到每一个MapTask所在的节点去fetch自己分区的数据。
拉取到的数据,如果比较小,会直接保存在内存中,在内存中完成排序,直到达到内存阈值,将其溢写到文件中;如果比较大,会直接以文件的形式保存起来。
数据拉取完成后,会按照设定好的合并因子进行合并。
按照Map阶段输出的的键进行分组,将相同键所对应的所有的值聚合到一起,形成一个集合。
将分组之后的键值对>,输入到Reduce方法中,进行逻辑处理。并输出最终的结果
将最终的结果,由客户端指定的OutputFormat进行输出。至此ReduceTask结束。
下一篇:深入理解数组的slice方法
开班时间:2021-04-12(深圳)
开班盛况开班时间:2021-05-17(北京)
开班盛况开班时间:2021-03-22(杭州)
开班盛况开班时间:2021-04-26(北京)
开班盛况开班时间:2021-05-10(北京)
开班盛况开班时间:2021-02-22(北京)
开班盛况开班时间:2021-07-12(北京)
预约报名开班时间:2020-09-21(上海)
开班盛况开班时间:2021-07-12(北京)
预约报名开班时间:2019-07-22(北京)
开班盛况Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号