Hadoop MapReduce Shuffle and Sort
来源:互联网 发布:成都软件测试培训 编辑:程序博客网 时间:2024/04/29 11:27
Hadoop 确保每个reduce 的输入都是按 key 排序的。系统执行排序的过程称为shuffle.
Map 端,map 产生输出时,并不是简单的把数据写到磁盘。会先缓冲在内存中,并进行一些预排序。
每个map 任务都有一个环形内存缓冲区,默认为100M,通过io.sort.mb设置,一旦缓冲区内容达到80%(io.sort.spill.percent,设置为0.80),后台线程会把内容写到磁盘中。
输出会写到由 mapred.local.dir 设置的目录中。
在数据被写入磁盘之前,会根据reduce数目进行分区(partitions)动作。在每个分区中,进行排序,然后运行 combiner,减少写到磁盘中的数据。
一旦内存缓冲区达到输出限制,会新建一个溢出写文件,在map任务完成前,会有几个溢出写文件。多个溢出写文件会被合并成一个已分区且已排序的输出文件。默认一次合并10个文件,通过 io.sort.factor设置。
如果剩下多于3个溢出文件(通过min.num.spills.for.combine设置),会再运行一次combiner
可以对map输出压缩,设置mapred.compress.map.output 和 mapred.map.output.compression.codec 属性。
Reduce端,map 输出文件位于运行map任务的tasktracker的本地磁盘。reduce 任务需要集群上若干个map 任务的输出。
只要有一个map任务完成,reduce任务就开始复制输出。reduce有多个复制线程可以并行运行。可以通过 mapred.reduce.parallel.copies 设置并行复制线程数,默认为5.
如果 map 输出小于 mapred.job.shuffle.input.buffer.percent 设置 JVM heap大小,就会被复制到 reduce tasktracker 的内存中,否则被复制到磁盘中。如果内存占用达到 mapred.job.shuffle.merge.percent 定义或复制的 map 输出数达到 mapred.inmem.merge.threshold ,就会合并到磁盘,会运行 combiner,减少写到磁盘中的数据。
当所有 map 输出都被复制完后,reduce 进入 sort 阶段。在这个阶段,根据 io.sort.factor定义的合并因子,进行循环处理。例如合并因子设置为10(默认),有50个map 输出,会进行5次合并,每次合并10个map 输出,做后会得到5个中间文件,最后把5个中间文件 传递给reduce 函数.
- Hadoop MapReduce Shuffle and Sort
- Hadoop 之 Shuffle and Sort
- Hadoop : MapReduce中的Shuffle和Sort分析
- Hadoop : MapReduce中的Shuffle和Sort分析
- Hadoop : MapReduce中的Shuffle和Sort分析
- Hadoop : MapReduce中的Shuffle和Sort分析
- Hadoop : MapReduce中的Shuffle和Sort分析
- MapReduce中的shuffle&sort
- mapreduce shuffle merge sort
- Hadoop : MapReduce中的核心Shuffle和Sort分析
- Hadoop mapreduce shuffle
- 【Hadoop】MapReduce笔记(三):MapReduce的Shuffle和Sort阶段详解
- Hadoop MapReduce:详解Shuffle过程
- Hadoop MapReduce的shuffle过程
- Hadoop MapReduce shuffle 中的问题
- Hadoop : MapReduce中的Shuffle和Sort分析 转载自:http://cache.baidu.com/c?
- Hadoop-2.2.0中文文档—— MapReduce下一代- 可插入的 Shuffle 和 Sort
- Hadoop-2.2.0中文文档—— MapReduce下一代- 可插入的 Shuffle 和 Sort
- cocos2d-x 知识小结(待更新)
- linux shell编程指南第五章------shell输入与输出1
- response.setHeader
- ref和out的区别
- 简单的WINSOCK2应用程序
- Hadoop MapReduce Shuffle and Sort
- ucosii操作系统基础知识
- 如果有如果。
- java程序员面试必备问答汇总
- 解决SQLite里面无法修改建表语句
- UITapGestureRecognizer导致UITableView的didSelectRowAtIndexPath函数失效解决办法
- centos6 vim 配置
- 在命令行怎么执行sql文件
- 这到底是个什么游戏。。