MapReduce

   MapReduce的shuffle(洗牌)机制

shuffle过程的解释:

两个Map并行进入环形缓冲区默认100M,一边写K,V结构的数据,一边写索引,这个索引目的是用来排序。默认100M ,80%开始溢写,溢写成一个一个的小文件,溢写到分区里之后进行排序,可以默认的字典排序也可以自定义排序继承与它的partitioner,之后可以做自定义分区了,接着combiner是用来做预合并用的。可以减少reduce的一个压力。然后就是做归并排序压缩环节,最后输出。

MapReduce一些优化手段,当一个一个溢写的时候,一个个小文件,然后会并发执行,这里会有一个小问题,一个10M的文件和100w个1K的小文件那个传输速度快?当然是10M的快,因为一个小文件会占用一个线程,这样会很慢。不断溢写会产生大量的小文件,怎样去减少溢写,把80%数值调大,但是不要调满。把数值调大溢写就少了,生成的小文件就相对性的减少了,文件就大了。

reduce阶段:是把输出到磁盘上的数据拷贝到reduce阶段,拿到数据以后也是先走内存缓冲,因为内存快,省时间,内存不够时候才会溢写到磁盘里,然后磁盘在做一次归并排序然后分组然后就是输出reduce。


MapReduce的运行方式就是shuffle的方式

配置参数

yarn-site.xml 文件

yarn.nodemanger.aux-services:mapreduce-shuffle

由于任务是nodemanger执行,它就配在nodemanger上了。

它是整个mapreduce处理核心的过程。

Hadoop3.x以前,2.x在shuffle的过程中会出现数据的落地,就是会有io操作,一旦产生数据的落地就会把内存中的数据写在硬盘上,就把这个叫做数据的落地,

会影响性能。3.x以前运算效率的速度没有spark快。3.x以后吧io的操作和内存的操作结合起来了。

你可能感兴趣的:(MapReduce)