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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 什么是JavaSE,写给第一次接触Java的人

    什么是JavaSE,写给第一次接触Java的人Java语法基础Java开发环境搭建Java概述Java是一门编程语言,是用来编写软件的。QQ、迅雷、淘宝、京东等等这些常用软件都可以用Java来编写。其实,Java最擅长的是编写如下类型的软件:1、互联网:电商、P2P2、企业级应用:ERP、CRM、BOS、OAJavaSE是java分类中的标准版,是刚接触java要学习的基础知识。JavaEE是java分类中的企

    2022年7月8日
    22
  • 韩国代理服务器_国内免费代理服务器

    韩国代理服务器_国内免费代理服务器由于台湾地区的地震影响到内地出口光缆,造成国内访问国外网站出现故障。推荐代理服务器:地址:222.231.50.97端口:80……[digit,linkhttp://wangxinyu.net/]…

    2022年4月19日
    145
  • phpstorm2021.5 激活码[在线序列号]

    phpstorm2021.5 激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    66
  • hadoop默认对3个副本的存储策略和执行策略:「建议收藏」

    hadoop默认对3个副本的存储策略和执行策略:「建议收藏」hadoop默认对3个副本的存储策略和执行策略:

    2022年4月23日
    49
  • ComponentName的用法

    ComponentName的用法在android应用中打开别的应用我当时第一眼看到的时候是懵逼的,这是个什么玩意开启界面不都是startActivity(intent)的吗?后来才反应过来不是要起自己界面中的Activity

    2022年7月1日
    38
  • Python3取余不等于0(巨坑)[通俗易懂]

    Python3取余不等于0(巨坑)[通俗易懂]这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Mar

    2022年4月25日
    91

发表回复

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

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