19
2021
01

mr 工作原理

mr 将得到的split 分配对应的 task,每个任务处理相对应的 split,将 split 以 line 方式读取每一行数据,将数据依次读取到100M(maprdeuce.task.io.sort.mb)的环形缓冲区读取过程中一旦到达阈值(mapreduce.map.sort.spill.percent)80M进行溢写操作,spiller线程溢写到磁盘(mapreduce.cluster.local.dir)目录中,期间会进行kv分区(分区数由reduce数来决定)默认使用hashpartition,再将分区中数据进行key的排序(默认排序规则是字典和升序),如果设置了setCombinerClass 则会对每个分区中的数据进行 combiner 操作,如果设置了output.compress压缩格式会对溢写的数据进行压缩,最后merge根据分区规则将数据归并到同一个文件中等待reduce的拉取,nodemanger将启动一个mapreduce_shuffle服务将数据以http方式拉取到reduce端,reduce处理阶段当达到阈值(默认0.66)或map输出数的阈值(默认100)会进行merge(同一分区的一组数据会先进行归并)|sort(将归并好的数据进行排序)|group(判断迭代器中的元素是否可以迭代),处理完成mr将同一个分区内的数据,在hdfs中以文件形式体现出来,几个分区就会创建几个文件。


其中reduce端的merge达到阈值会触发,sort则是维持其map阶段顺序,而group是设置( setGroupingComparatorClass)后才会触发。


有效的理解mr工作流程可大大提升程序运行效率,其中 mr 的 shuffle 也被称为奇迹开始的地方

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。