学习
实践
活动
工具
TVP
写文章
原创

MapReduce

MapReduce

源码讲解

shuffle过程

1.圆环代表buffer环,不断的有k,v往里存储,超过一定的量就会发生溢写

2.溢写需要把这个数据拉取出来,但是不知道每个数据的位置,那么就需要在圆环数据记录的起始位置往另外一边,记录四个量,大概占用16B

3.默认溢写,是大于数组大小的80%就会触发

4.溢写的区域就会被锁定,会被拉取并清除,剩下的区域会开辟一个赤道,也就是剩余区域的中心位置,kv值和位置信息分别从两边读取,若触发下一次溢写,仍然按照上述算法执行

map初始化阶段主要做了什么事情

map任务启动,一个切片对应一个文件,对这个文件发起一个io,对这个文件执行一个seek方法,参数是切片的偏移量,就从开始的阶段开始读

在读取数据的过程中如果不是这个文件的第一行,在初始化的过程中,会抛弃读取的第一行数据,原因是那一行数据有可能被block给截断,所以要让上一个切片多读一行保证数据的完整

nextKeyValue详解

nextKeyValue的代码key其实就是偏移量pos,value就是文本内容,pos会根据读取数据将偏移量往上加,内容也会跟着变化。所以,nextKeyValue在执行过程中,key和value是不停跟着在变的

整个map写入的过程

这个时候进入map的写入的过程,将数据根据kv生成一个p,序列化添加进buffer缓冲区中,若缓冲区达到设置的上线就会发生溢写,将数据根据记录进行拉取,并且排序,合并生成一个小文件,等待着reducetask进行处理

reduce过程

在reduce中有两组迭代,一组时迭代key,还有一组是迭代相同key的分组数据,又一次用到了reduce的原语:相同的key为一组,调用一次reduce的方法,在reduce方法中迭代这一组数据进行计算

基本理解

map

映射为K,V模型

并行分布式

计算向数据移动

reduce

对数据进行全量/分量加工

相同的key汇聚到reduce task中

一个reduce task可以包含多个key,由分区器控制

rduce原语(很重要,要记住)

相同的key为一组,调用一次reduce方法,在reduce方法中迭代这一组数据进行计算

架构

Hadoop1.0架构

角色

· JobTracker

• 核心,主,单点

• 调度所有的作业

• 监控整个集群的资源负载

· TaskTracker

• 从,自身节点资源管理

• 和JobTracker心跳,汇报资源,获取Task

· Client

• 作业为单位

• 规划作业计算分布

• 提交作业资源到HDFS

• 最终提交作业到JobTracker

问题

· JobTracker:负载过重,单点故障

· 资源与计算强耦合,其他计算框架需要重复实现资源管理,例如如果用spark也要进行调用,不知道哪个是被MapReduce调用的

· 不同框架对资源不能全局管理

运行过程

· 1.Client如果有一个map的请求,然后去NN中寻找相关文件的位置

· 2.Client再把请求发送到JT中,TT和JT是通过心跳机制进行通信,TT和JT进行心跳过后,发现有map请求,那么就在数据所在的那个节点,或者空闲临近的节点开始进行map处理

· 3.map完成之后,TT和JT进行心跳通信,发送map完成,需要reduce,那么就JT就选择若干个节点进行reduce

· 4.reduce根据分区拉取对应map节点的数据,最后进行合并

Hadoop2.0架构

角色

· YARN:解耦资源与计算

• ResourceManager

• 主,核心

• 集群节点资源管理

• NodeManager

• 与RM汇报资源

• 管理Container生命周期

• 计算框架中的角色都以Container表示

• Container:【节点NM,CPU,MEM,I/O大小,启动命令】

• 默认NodeManager启动线程监控Container大小,超出申请资源额度,kill

• 支持Linux内核的Cgroup

· MR

• ApplicationMaster-Container

• 作业为单位,避免单点故障,负载到不同的节点

• 创建Task需要和RM申请资源(Container)

• Task-Container

• 执行任务的单元

· Client

• RM-Client:请求资源创建AM

• AM-Client:与AM交互

运行过程

· 1.用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。

· 2.ResourceManager为该应用程序分配第一个Container,并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster

· 3.ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7

· 4.ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源

· 5.一旦ApplicationMaster申请到资源后,便与对应的NodeManager(在对应数据所在的节点)通信,要求它启动任务,首先执行map task

· 7.各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务

· 8.应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己

在资源管理中,一切皆container

· 6.当map task执行完后,ApplicationMaster会向RM申请资源,申请到后NodeManger,会创建环境,将数据拉去到对应节点,并执行reduce task

原创声明,本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

登录 后参与评论
0 条评论

相关文章

  • MapReduce浅读MapReduce概要

    几个小时要处理完TB的数据,但是这些程序一般都不是分布式系统人员开发的,使用起来因为一些分布式的系统问题,会非常的痛苦

    zhuanxu
  • Mapreduce

    在map的输出value中为不同表的数据打上tag标记,在reduce阶段根据tag判断数据来源。MapReduce的过程如下:

    海风铃
  • MapReduce解读

        MapReduce,学习分布式系统必读的经典佳作,写在本系列的开篇。文章按该paper的思路解析Map Reduce编程模型核心思想和关注点、案例及其实...

    用户5921582
  • 实现MapReduce

    当我们要统计数亿文本的词频,单个机器性能一般,况且是数亿级数据,处理是十分缓慢的,对于这样的任务,希望的是多台电脑共同处理,大幅度减少任务时间。联合多台电脑一起...

    努力努力再努力F
  • 继续MapReduce

    首先有一个client(客户端),然后由客户端发送一个请求,这里的请求就是我要计算某个数据,把请求发送给ResourceManager。这里ResourceMa...

    可爱见见
  • Hadoop - MapReduce

    作者:tutorialspoint 译者:java达人 来源:https://www.tutorialspoint.com/hadoop/hadoop_mapr...

    java达人
  • MapReduce Join

    王知无-import_bigdata
  • mapreduce过程

    程序会根据inputformat将文件分割成splits分片,每个分片会分配一个map task任务,每个map task任务会有一个内存缓冲区,任务处理后的结...

    全栈程序员站长
  • MapReduce Join

    用户1621453
  • 【MapReduce】分布式计算框架MapReduce

    MapReduce起源是2004年10月Google发表了MapReduce论文,之后由Mike Cafarella在Nutch(爬虫项目)中实现了MapRed...

    十里桃花舞丶
  • 详解MapReduce(Spark和MapReduce对比铺垫篇)

    本来笔者是不打算写MapReduce的,但是考虑到目前很多公司还都在用这个计算引擎,以及后续要讲的Hive原生支持的计算引擎也是MapReduce,并且为Spa...

    大数据学习与分享
  • MapReduce快速入门系列(16) | MapReduce开发总结

      用户根据业务需求实现其中三个方法:map() setup() cleanup()

    不温卜火
  • MapReduce快速入门系列(1) | 什么是MapReduce

    MapReduce思想在生活中处处可见。或多或少都曾接触过这种思想。MapReduce的思想核心是“分而治之”,适用于大量复杂的任务处理场景(大规模数据处理场景...

    不温卜火
  • MapReduce快速入门系列(12) | MapReduce之OutputFormat

      OutputFormat是MapReduce输出的基类,所有实现MapReduce输出都实现了OutputFormat接口。下面介绍几种常见的OutputF...

    不温卜火
  • Eclipse下Hadoop的MapReduce开发之MapReduce编写

        先说下业务需求吧,有个系统日志文件,记录系统的运行信息,其中包含DEBUG、INFO、WARN、ERROR四个级别的日志,现在想要看到所有级别各有多少条...

    尚浩宇
  • Eclipse下Hadoop的MapReduce开发之mapreduce打包

    点击next,使用默认选择,再点击next,在最下面的Main class处选择项目里的MapReduceTest

    尚浩宇
  • MapReduce设计模式

    一:概要模式 1:简介 概要设计模式更接近简单的MR应用,因为基于键将数据分组是MR范型的核心功能,所有的键将被分组汇入reducer中 本章涉及的概要模...

    Albert陈凯
  • MapReduce设计模式

    MapReduce设计模式(MapReduce Design Pattern) 整个MapReduce作业的阶段主要可以分为以下四种:   1、Input-M...

    Albert陈凯
  • 什么是MapReduce?

    什么是MapReduce?马 克-to-win @ 马克java社区:1)MapReduce是面向大数据并行程序设计的模型和方法,这一点很像我们前面讲的MVC,...

    马克java社区

扫码关注腾讯云开发者

领取腾讯云代金券