文档章节

mapreduce执行过程概述

西二旗之猫
 西二旗之猫
发布于 2017/04/07 11:25
字数 1059
阅读 4
收藏 0

MapReduce框架

Mapreduce初析

Mapreduce是一个计算框架,输入<k,v>类型的值得到一个计算之后的<k,v>类型的值,重点在于它是分布式运行的,也就是说计算的第一阶段Map会在多个不同节点上同时执行一套计算逻辑,之后再通过combiner shuffle 等阶段提交到一个reduce,reduce是对多个map执行结果的汇总(或者也可以不是汇总而且另一种计算,它的输入值是全部map的输出值)

在运行一个mapreduce计算任务时候,任务过程被分为两个阶段:map阶段和reduce阶段,每个阶段都是用键值对(key/value)作为输入(input)和输出(output)。而程序员要做的就是定义好这两个阶段的函数:map函数和reduce函数。

逻辑概念 

完整的MapReduce包含5个阶段

  • 输入分片(input split):在执行计算之前根据数据文件进行分片,每个分片对应一个map任务,输入分片不是输入的具体数据而是记录的位置和分片的长度,分片的大小应该基本上和hdfs block块的大小一致(或者略小于),因为如果一个分片跨域两个数据库,那么很可能这两个数据块不在一个节点,这样就需要数据库夸网络传输到map所在节点进行计算,产生了不必要的网络传出
  • map阶段:map阶段在每个节点本地执行map函数逻辑
  • combiner阶段:combiner阶段可以理解为本地的reduce,会在每个节点本地执行一些汇总操作(或者别的操作),值得注意的是不是所有逻辑都可以通过combiner优化,类似于求最大值最小值这种可以在combiner节点进行,只把本地节点的最大值传递给下一阶段,但是对于求平均值则不可用在combiner阶段进行,因为combiner会被多次执行,多次执行之后平均值将不再准确
  • shuffle阶段 将map的输出转化为reduce的输入的过程就是shuffle,map输出计算结果是向一个环形内存缓冲区输出的默认是100MB,其中有一个阈值默认是80%,如果达到了阈值就会在磁盘上生产一个spill文件,还会有一个守卫线程将这些文件整理成排序的partition分区,reduce会启动拷贝进程,将各个节点上的map任务计算结果拷贝到reduce所在节点,拷贝的过程也涉及到合并和排序
  • reduce阶段,reduce函数会已shuffle阶段(其实现在还属于shuffle阶段)map生成的分区文件作为输入,reduce会启动复制线程(默认是5个)复制这些数据,复制这些数据的时候也会有一个缓冲区,缓冲区被带到阈值之后会将数据写入磁盘文件,之后还会有一个合并文件的过程(这里也可以指定参数 合并因子),最终合并完之后的数据会作为输入传递给reduce reduce在执行自定义的逻辑

yarn 控制MapReduce过程的一些概念:

  • client 向yarn提交job,先找到ResourceManager分配资源
  • ResourceManager 开启一个container 在container中运行一个Application Manager
  • Application Manager 找到一个台nodemanager启动Application master
  • Application master向ApplicationManager 申请运行任务需要的资源
  • Resource Scheduler将资源封装好发给 ApplicationMaster
  • Application master将资源分配到 nodemanager
  • 各个nodemanager得到任务和资源开始执行map task
  • map task执行结束后,开始执行reduce task
  • map task和 reduce task将执行结果反馈给Application master
  • Application master将任务执行的结果反馈pplication manager

© 著作权归作者所有

西二旗之猫
粉丝 7
博文 54
码字总数 39074
作品 0
私信 提问

暂无文章

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
9
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
914
11
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部