mapreduce-shuffling

mapreduce-shufflingmap->reducemap和reduce之间的过程,成为shuffling,官方图是这样介绍的.(这样描述不是很准确)MapTask每个map任务都有一个环形内存缓冲区用于存储任务的输出.默认100MB(MRJobConfig.IO_SORT_MB修改)一旦缓冲达到阈值(MRJobConfig.MAP_SORT_SPILL_PERCENT)0.8,后台

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

map->reduce

map和reduce之间的过程,成为shuffling,官方图是这样介绍的.(这样描述不是很准确)

Jetbrains全家桶1年46,售后保障稳定

这里写图片描述

MapTask

每个map任务都有一个环形内存缓冲区用于存储任务的输出.默认100MB(MRJobConfig.IO_SORT_MB修改)
一旦缓冲达到阈值(MRJobConfig.MAP_SORT_SPILL_PERCENT)0.8,后台线程将内容spill到硬盘,将缓缓冲区写到MRJobConfig.JOB_LOCAL_DIR指定目录.
查看MRJobConfig.JOB_LOCAL_DIR值为mapreduce.job.local.dir,查看org.apache.hadoop.mapreduce包下的mapred-default.xml(hadoop-mapreduce-client-core.2.7.1.jar中)文件搜索local.dir,得到配置

<property>
  <name>mapreduce.cluster.local.dir</name>
  <value>${hadoop.tmp.dir}/mapred/local</value>
  <description>The local directory where MapReduce stores intermediate
  data files.  May be a comma-separated list of
  directories on different devices in order to spread disk i/o.
  Directories that do not exist are ignored.
  </description>
</property>

ok,现在从hadoop-common-2.7.1.jar中的core-default.xml中搜索hadoop.tmp.dir

<property>
  <name>hadoop.tmp.dir</name>
  <value>/tmp/hadoop-${user.name}</value>
  <description>A base for other temporary directories.</description>
</property>

现在我们得到了spill的临时路径/tmp/hadoop-${user.name}/mapred/local.

在spill之前,首先进行partition,每个分区进行sort,如果有combiner,它就在排序后,执行combiner。

如果溢出文件超过三个(JobContext.MAP_COMBINE_MIN_SPILLS),将会再次执行combiner

MapTask.MapOutputBuffer中源码

if (combinerRunner == null || numSpills < minSpillsForCombine) {
    Merger.writeFile(kvIter, writer, reporter, job);
} else {
    combineCollector.setWriter(writer);
    combinerRunner.combine(kvIter, combineCollector);
}

注: map spill到磁盘时,可以设置压缩来节省磁盘和网络IO
设置 MAP_OUTPUT_COMPRESS 为true ,MRJobConfig.MAP_OUTPUT_COMPRESS_CODEC值为codec
例如:
conf.set(MRJobConfig.MAP_OUTPUT_COMPRESS, "true");
conf.set(MRJobConfig.MAP_OUTPUT_COMPRESS_CODEC, "org.apache.hadoop.io.compress.DefaultCodec");

ReduceTask

ReduceTask要从各个MapTask上读取数据,ReduceTask大体流程分为5个阶段。
  1. Shuffle
    ReduceTask从MapTask上远程拷贝数据。超过阈值写道磁盘。
  2. Merge
    ReduceTask启动两个线程,对内存和硬盘数据进行合并。
  3. Sort
    将MapTask的结果归并排序。
  4. Reduce
    用户自定义Reduce
  5. Write
    reduce结果写到HDFS

    源码分析

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226581.html原文链接:https://javaforall.net

(0)
上一篇 2025年6月26日 下午8:15
下一篇 2025年6月26日 下午8:43


相关推荐

  • Elasticsearch的使用场景深入详解「建议收藏」

    Elasticsearch的使用场景深入详解「建议收藏」了解了ES的使用场景,ES的研究、使用、推广才更有价值和意义。1、场景—:使用Elasticsearch作为主要的后端传统项目中,搜索引擎是部署在成熟的数据存储的顶部,以提供快速且相关的搜索能力。这是因为早期的搜索引擎不能提供耐用的​​存储或其他经常需要的功能,如统计。Elasticsearch是提供持久存储、统计等多项功能的现代搜索引擎。如果你开始一个新项目,我们建议您考虑使用Elas

    2022年6月12日
    35
  • PID算法原理 一图看懂PID的三个参数

    PID算法原理 一图看懂PID的三个参数找了好久这一篇算是很容易看懂的了推荐给大家写的十分清楚原文作者DF创客社区virtualwizLZ以前有个小小的理想,就是让手边的MCU自己“思考”起来,写出真正带算法的程序。前段时间做一个比赛项目的过程中,对经典、实用的PID算法有了一点点自己的理解,就写了这些,与大家分享因为LZ想尽办法,试着用最易于理解的语言说清楚原理,不做太多的理论分析。(LZ文学功底不行),所以…

    2022年6月5日
    154
  • JavaScript 常用转义字符

    JavaScript 常用转义字符JavaScript 的转义字符依然是 下面是常用的转义字符 b 代表退格 t 代表一个制表符 即一个 Tab 空格 n 换行回车 v 垂直的制表符 r 回车 双引号 单引号 反斜线 即 OOO 使用八进制表示的拉丁字母 OOO 表示一个 3 位的八进制整数 范围是 000 377 xHH 使用十六进制数表示的拉丁字母 HH 表示一

    2025年8月25日
    6
  • linux安装在固态盘性能差_固态硬盘格式化不了

    linux安装在固态盘性能差_固态硬盘格式化不了##磁盘尽可能恢复到从未被使用且不包含任何数据的状态检查磁盘Security状态给该磁盘设定一个密码执行secureerase命令上述方法可以尽可能的将硬盘恢复到新盘无数据状态检查磁盘Security状态hdparm-I/dev/sdc检查磁盘security状态,如果frezen直接热插拔,然后再次检查该磁盘状态,如果状态切换到了notfrozen则可以进行secureerase操作给该磁盘设定一个密码使用命令“hdparm–user-masteru–security-s

    2025年11月27日
    5
  • 入选互联网名人堂的三位中国人[通俗易懂]

    入选互联网名人堂的三位中国人[通俗易懂]互联网名人堂(TheInternetHallofFame)由互联网协会(InternetSociety)创建于2012年,目的在于表彰为互联网发展做出杰出贡献的人物,被认为是全球互联网社群的最高荣誉。互联网名人堂的获奖人分为三类:互联网创始人/先驱(Pioneers)互联网创新者/改革者(Innovators)推动全球互联者(GlobalConnectors)除了2…

    2022年6月16日
    60
  • java webservice 入门教程_WebService入门实例教程

    java webservice 入门教程_WebService入门实例教程什么是 WebService 通过使用 WebService 您的应用程序可以向全世界发布信息 或提供某项功能 它是基于 Web 的服务 通过 Web 进行发布 查找和使用 WebService 脚本平台需支持 XML HTTP HTTP 协议是最常用的因特网协议 XML 提供了一种可用于不同的平台和编程语言之间的语言 为什么要使用 WebService 最重要的事情是协同工作 1 跨平台调用 WebService 不局限于

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号