`
BlackWing
  • 浏览: 196444 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

shuffle & sort解释

阅读更多
转载请标明出处:http://blackwing.iteye.com/blog/1848401

MR任务,充分利用了缓存进行读写。

1)map端
每个map任务,都会先把数据写到一个环形缓存中,该缓存默认大小是100MB,由io.sort.mb(默认值是100MB)和io.sort.spill.percent(默认值是0.8)共同决定。在默认情况下,当缓存达到80MB时,后台线程就开始把数据spill到磁盘。而map会继续写数据到缓存中,当100MB的缓存写满后,map就会阻塞,直到spill完成。

在spill写数据到磁盘前,线程会根据reducer的数量(例如10个reducer)把输出数据切分为相应个数的partition,在每个partition中,后台线程会对其中的数据进行排序,如果该job有combiner,则此时也会调用combiner对数据进行合并。partition是逻辑划分,是指一个spill的文件中,或逻辑划分为几个partition。

在map结束前,如果有超过min.num.spills.for.combine(默认值3)个spill,则这些spill会被合并成一个分好区的大文件。

每个map生成的数据,会通过http传输给reducer。

2)reduce端
reducer通过http把map输出的数据copy到本地,copy数据的线程数由mapred.reduce.parallel.copies进行设置(默认值5)。

如果map的输出数据足够小,则会直接写入缓存中(由mapred.job.shuffle.input.buffer.percent设置,指占JVM的比例),否则写入磁盘。当缓存数据达到mapred.job.shuffle.merge.percent(默认0.8)或者超过mapred.inmem.merge.threshold(默认1000)个文件,则开始把数据spill到磁盘。此时如果job有combiner,则会调用它以减少写入磁盘的数据。

在数据不断写入磁盘同时,后台线程会把这些数据合并成一个更大的排好序的文件,节省后续合并的时间。当所有map的输出都copy到reducer后,就进入合并排序阶段,生成一个有序的大文件。

总结来说,调用combiner的地方如下:
*map端spill数据到磁盘
*map端,map结束前,合并多个spill
*reduce端spill数据到磁盘

《hadoop in practice》作者的spill过程图解:
http://grepalex.com/2012/09/24/map-partition-sort-spill/
分享到:
评论

相关推荐

    shuffle的关键阶段sort(Map端和Reduce端)源码分析

    今天小编就为大家分享一篇关于shuffle的关键阶段sort(Map端和Reduce端)源码分析,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    Spark 的两种核心 Shuffle 详解.pdf

    Spark Shuffle 分为两种:一种是基于 Hash 的 Shuffle;另一种是基于 Sort 的 Shuffle。

    Hive大数据倾斜总结

    Hive查询生成多个map reduce job,一个map reduce job又有map,reduce,spill,shuffle,sort等多个阶段,所以针对hive查询的优化可以大致分为针对MR中单个步骤的优化,针对MR全局的优化以及针对整个查询的优化。...

    shuffle-and-sort

    随机排序卡

    Shuffle:分类,排序和过滤响应式网格

    对响应的项目​​网格进行分类...const shuffleInstance = new Shuffle ( document . getElementById ( 'grid' ) , { itemSelector : '.js-item' , sizer : '.js-shuffle-sizer' , } ) ; 灵感 这个项目的灵感来自和。

    apache-tez-0.9.0-bin.tar.gz

    Tez是Apache开源的支持DAG作业的计算框架,它直接源于MapReduce框架,核心思想是将Map和Reduce两个操作进一步拆分,即Map被拆分成Input、Processor、Sort、Merge和Output, Reduce被拆分成Input、Shuffle、Sort、...

    apache-tez-0.8.3-src.tar.gz

    Tez是Apache开源的支持DAG作业的计算框架,它直接源于MapReduce框架,核心思想是将Map和Reduce两个操作进一步拆分,即Map被拆分成Input、Processor、Sort、Merge和Output, Reduce被拆分成Input、Shuffle、Sort、...

    数据仓库中的SQL性能优化(Hive篇)

    reducejob,一个mapreducejob又有map,reduce,spill,shuffle,sort等多个阶段,所以针对hive查询的优化可以大致分为针对MR中单个步骤的优化(其中又会有细分),针对MR全局的优化,和针对整个查询(多MR ...

    sort-lines:Atom程序包对文本行进行排序

    排序行包 在Atom中对行进行排序。 永远不会累。 安装 在Atom中:设置->安装->搜索“排序行”,然后单击“安装”或 从CLI: apm install sort-lines然后...sort-lines:shuffle 按随机顺序对行进行排序 sort-lines:re

    rand_sort:具有不确定性能特征的数组排序

    随机排序 这是一个非常糟糕的主意,但这很有趣。 确定性输出,不确定性运行时性能。 我们正在修补一个谓词函数,以检查给定的Enumerable / Array是否已排序,然后修补一个新的... arr = (1..6).to_a.shuffle p arr.

    Hadoop开发者第一期入门专刊

    50 MapReduce 中的Shuffle 和Sort 分析 53 海量数据存储和计算平台的调试器研究 56 探讨MapReduce 模型的改进 58 运行eclipse 编译出的Hadoop 框架 59 表关联在MapReduce 上的实现 63 Hadoop 计算平台和Hadoop 数据...

    数据结构常用算法c++实现

    Array shuffle Prime test(trial division) Prime test(Miller-Rabin's method) 2D Array Arbitary Integer Linear congruential generator Maximum subarray problem Bit-Set Queue Stack Binary Heap Fibonacci ...

    SortColors:允许您对一系列颜色进行排序,从深到浅并反转

    var sc = new SortColors ( colors ) ; sc . shuffle ( ) ; var list = sc . get ( ) ; 支持的格式: 十六进制 RGB(即将推出) HSV(很快) HSL(很快) 可用方法: add(color) - 为集合添加颜色 set(colors) -...

    apache hadoop 2.7.2.chm

    Pluggable Shuffle/Sort Distributed Cache Deploy MapReduce REST APIs MR Application Master MR History Server YARN Overview YARN Architecture Capacity Scheduler Fair Scheduler ResourceManager ...

    深入浅出数据仓库中SQL性能优化之Hive篇

    Hive查询生成多个mapreducejob,一个mapreducejob又有map,reduce,spill,shuffle,sort等多个阶段,所以针对hive查询的优化可以大致分为针对MR中单个步骤的优化,针对MR全局的优化以及针对整个查询的优化。...

    hive性能优化

    一个Hive查询生成多个map reduce job,一个map reduce job又有map,reduce,spill,shuffle,sort等多个阶段,所以针对hive查询的优化可以大致分为针对M/R中单个步骤的优化,针对M/R全局的优化,和针对整个查询(多M...

    utils.js:适用于懒惰开发者的零依赖原生 JavaScript 实用程序

    实用程序.js 懒惰开发者的 JavaScript 实用程序。 安装 npm install @fabiocaccamo/utils.js 用法 浏览器 < script src =" node_modules/@... shuffle sort unique unzip zip utils.base64 decode encode

Global site tag (gtag.js) - Google Analytics