mapreduce的计算原理

第一章 mapreduce的计算原理

1.MapReduce介绍

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)“和"Reduce(归约)”,是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

MapReduce 是为处理和生成大数据集的编程模式和相应的实现。
用户指定一个 map 函数来处理一个键值对来生成一个键值对的集合,
和一个 reduce 函数来合并具有相同中间键的实值。

MapReduce架构

  1. MapReduce将输入的数据集逻辑切片
  2. map任务以并行方式处理切片数据
  3. 框架对map输出进行排序,然后将数据发送给reduce
  4. MapReduce的输入输出数据存在于同一个文件系统(HDFS)
  5. 框架负责任务调度,任务监控和失败任务的重新执行

MapReduce原语

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

输入(格式化k,v)数据集map映射成一个中间数据集(k,v)reduce

MapReduce数据结构

map:(K1,V1)→list(K2,V2)

reduce:(K2,list(V2))→list(K3,V3)

  1. MapReduce处理键值对形式的很多键值对输入,生成键值对形式的很多键值对输出
  2. 框架会对键和值序列化,因此键类型和值类型需要实现Writable接口。框架会对键进行排序,因此必须实现WritableComparable接口。
    • K,V使用自定义数据类型
      • 作为参数传递,节省开发成本,提高程序自由度
      • Writable序列化:使能分布式程序数据交互
      • Comparable比较器:实现具体排序(字典序,数值序等)
  3. map输出键值对类型和reduce键值对输入类型一致
  4. map的输入键值对类型和输出键值对类型一般不一致
  5. reduce的输入键值对类型和输出键值对类型一般不一致

2.MapReduce工作流程

为什么叫MapReduce:MapTask & ReduceTask

输入的数据集逻辑切片,切得越多,并行处理的越多,数据处理的越快。

切片,Map计算,排序,将数据发送给Reduce

  • 一个大的文件分为多个block块,然后用split切片切成小块,每个小块对应一个map,实现并行计算,提高计算速度。每一个map写入到环形缓冲区中,环形缓冲区(100M)写够80M就可以写入磁盘了。环形缓冲区存在于内存中,对这些map进行分区(几个reduce就对应几个分区),排序,然后发给对应的某个reduce。在发给reduce之前,可进行一次归并排序,将相同key的归并在一起,然后调用一次reduce方法,方法内部对数据进行计算。

  • split切片:是为了调整map的数量,进行并行计算,提高计算速度。实际就是将map和block块做了一个解耦,实现用多个map对应一个block块。

  • 从文件中一行一行读数据,输出键值对,key就是这行数据的偏移量,值是这行数据。

  • 对每个键值对中的value进行处理,在这一行中,每个单词出现了几次记为键值对,key就是这个单词,value就是这个单词出现的次数。将这些键值对分好区、排好序后再落磁盘。因为如果不处理就写入磁盘的话,再进行分区排序时就需要再从磁盘中读入内存,增加工作量。

  • Reduce必须拿到所有的map数据后才可以进行计算。

1560427556513

1560419306200

1560419451588

1560419515917

1560420952332

Map部分

  • 读懂数据

  • 映射为KV模型

  • 并行分布式

  • 计算向数据移动

1560419606983

reduce部分

  • 数据全量/分量加工

  • Reduce中可以包含不同的key

  • 相同的Key汇聚到一个Reduce中

  • 相同的Key调用一次reduce方法

    • 排序实现key的汇聚

1560419629187

Shuffle

  • Shuffler<洗牌>:框架内部实现机制

  • 分布式计算节点数据流转:连接MapTask与ReduceTask

1560420901014

1560419644797

sort阶段

Map数据发送给reduce何时合并,是否需要落磁盘。

1560419677859

各个部分对应数量关系

  • block > split

    • 1:1

    • N:1

    • 1:N

  • split > map

    • 1:1
  • map > reduce

    • N:1

    • N:N

    • 1:1

    • 1:N

  • group(key)>partition(分区:对应一个reduce)

    • 1:1
    • N:1
    • N:N
    • 1:N 错误 违背了原语 不能把一组数据分给多个reduce,可以多组数据分给多个reduce
  • partition > outputfile

    • 1:1

总结

  1. 一个reduce对应一个分区
  2. 一个map对应一个切片split
  3. reduce数量由人来决定

1560419697129

3.Hadoop 1.x

运行架构:体现计算向数据移动

客户端先启动,先去分析路径下的文件,进行split切片。

客户端先去产生切片清单,如:基于某个文件,该文件切成了多少个切片,每个切片多大,从哪开始到哪结束,同时取出切片对应的块的位置信息。

客户端

  • 配置文件/jar包/切片信息发送到HDFS以作业编号命名的目录中(HDFS目录)
  • 计算切片信息
  • 检查路径
  • 出发JobTracker开始分布作业

MRv1:JobTracker和TaskTracker概述

JobTracker

  • 调度作业
  • 资源使用情况的监控和管理
  • 从HDFS上把切片文件下载回来,然后根据资源负载情况来分析切片里的每一个map应该去到哪个节点

Hadoop中MapReduce 的执行也是采用Master/Slave 主从结构的方式。其中JobTracker 充当了Master的角色,而TaskTracker 充当了Slave 的角色。Master负责接受客户端提交的Job,然后调度Job的每一个子任务Task运行于Slave上,并监控它们。如果发现所有失败的Task就重新运行它,slave则负责直接执行每一个Task。

当Hadoop启动的时候,JobTracker 是作为单独的一个JVM来运行的。JobTracker 会一直等待JobClient通过RPC来提交作业,它调度处理JobClient提交的每一个任务,并监控它们的运行。当发现有失败的任务的时候,JobTracker会重新执行它。而且 TaskTracker 会一直向JobTracker发送心跳,询问JobTracker是否有任务需要处理。

一 概述:

(1)Hadoop MapReduce采用Master/Slave结构。

  • Master:是整个集群的唯一的全局管理者,功能包括:作业管理、状态监控和任务调度等,即MapReduce中的JobTracker。
  • Slave:负责任务的执行和任务状态的回报,即MapReduce中的TaskTracker。

二 JobTracker剖析:

(1)概述:JobTracker是一个后台服务进程。

启动之后,会一直监听并接收来自各个TaskTracker发送的心跳信息,包括资源使用情况和任务运行情况等信息。

(2)JobTracker的主要功能:

  1. 作业控制:在hadoop中每个应用程序被表示成一个作业,每个作业又被分成多个任务,JobTracker的作业控制模块则负责作业的分解和状态监控。
    最重要的是状态监控:主要包括TaskTracker状态监控、作业状态监控和任务状态监控。
    主要作用:容错和为任务调度提供决策依据。
  2. 资源管理。

三 TaskTracker剖析:

(1) TaskTracker概述:TaskTracker是JobTracker和Task之间的桥梁:

一方面,从JobTracker接收并执行各种命令:运行任务、提交任务、杀死任务等;

另一方面,将本地节点上各个任务的状态通过心跳周期性汇报给JobTracker。

TaskTracker与JobTracker和Task之间采用了RPC协议进行通信。

(2) TaskTracker的功能:

  1. 汇报心跳:Tracker周期性将所有节点上各种信息通过心跳机制汇报给JobTracker。这些信息包括两部分:

    • 机器级别信息:节点健康情况、资源使用情况等。

    • 任务级别信息:任务执行进度、任务运行状态等。

  2. 执行命令:JobTracker会给TaskTracker下达各种命令,主要包括:启动任务(LaunchTaskAction)、提交任务(CommitTaskAction)、杀死任务(KillTaskAction)、杀死作业(KillJobAction)和重新初始化(TaskTrackerReinitAction)。

1560421237598

计算框架Mapper

1560421259079

计算框架Reducer

1560421279069

MRv1角色

  • JobTracker

    • 核心,主,单点
    • 调度所有的作业
    • 监控整个集群的资源负载
  • TaskTracker

    • 从,自身节点资源管理
    • 和JobTracker心跳,汇报资源,获取Task
  • Client

    • 作业为单位
    • 规划作业计算分布
    • 提交作业资源到HDFS
    • 最终提交作业到JobTracker

1.x 弊端

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

  • 资源管理与计算调度强耦合,其他计算框架需要重复实现资源管理

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

4.MRv2:YARN 分布式资源调度框架

4.1 YARN介绍

YARN:Yet Another Resource Negotiator;

Hadoop 2.0新引入的资源管理系统,直接从MRv1演化而来的;

  • 核心思想:将MRv1中JobTracker的资源管理和任务调度两个功能分开,分别由ResourceManager和ApplicationMaster进程实现
  • ResourceManager:负责整个集群的资源管理和调度
  • ApplicationMaster:负责应用程序相关的事务,比如任务调度、任务监控和容错等

YARN的引入,使得多个计算框架可运行在一个集群中

  • 每个应用程序对应一个ApplicationMaster
  • 目前多个计算框架可以运行在YARN上,比如MapReduce、Spark、Storm等
资料
  • YARN的基本思想是将JobTracker的两个主要功能(资源管理和作业调度/监控)分离,主要方法是创建一个全局的ResourceManager(RM)和若干个针对应用程序的ApplicationMaster(AM)。这里的应用程序是指传统的MapReduce作业或作业的DAG(有向无环图)。

  • YARN 分层结构的本质是 ResourceManager。这个实体控制整个集群并管理应用程序向基础计算资源的分配。ResourceManager 将各个资源部分(计算、内存带宽等)精心安排给基础 NodeManager(YARN 的每节点代理)。ResourceManager 还与 ApplicationMaster 一起分配资源,与 NodeManager 一起启动和监视它们的基础应用程序。在此上下文中,ApplicationMaster 承担了以前的 TaskTracker 的一些角色,ResourceManager 承担了 JobTracker 的角色。

  • ApplicationMaster 管理一个在 YARN 内运行的应用程序的每个实例。ApplicationMaster 负责协调来自 ResourceManager 的资源,并通过 NodeManager 监视容器的执行和资源使用(CPU、内存等的资源分配)。请注意,尽管目前的资源更加传统(CPU 核心、内存),但未来会带来基于手头任务的新资源类型(比如图形处理单元或专用处理设备)。从 YARN 角度讲,ApplicationMaster 是用户代码,因此存在潜在的安全问题。YARN 假设 ApplicationMaster 存在错误或者甚至是恶意的,因此将它们当作无特权的代码对待。

  • NodeManager 管理一个 YARN 集群中的每个节点。NodeManager 提供针对集群中每个节点的服务,从监督对一个容器的终生管理到监视资源和跟踪节点健康。MRv1 通过插槽管理 Map 和 Reduce 任务的执行,而 NodeManager 管理抽象容器,这些容器代表着可供一个特定应用程序使用的针对每个节点的资源。YARN 继续使用 HDFS 层。它的主要 NameNode 用于元数据服务,而 DataNode 用于分散在一个集群中的复制存储服务。

  • 要使用一个 YARN 集群,首先需要来自包含一个应用程序的客户的请求。ResourceManager 协商一个容器的必要资源,启动一个 ApplicationMaster 来表示已提交的应用程序。通过使用一个资源请求协议,ApplicationMaster 协商每个节点上供应用程序使用的资源容器。执行应用程序时,ApplicationMaster 监视容器直到完成。当应用程序完成时,ApplicationMaster 从 ResourceManager 注销其容器,执行周期就完成了

4.2 MRv2作业提交流程

作业,一般是jar包的形式。

  1. 客户端先向ResourceMananger取号,取号之后查看输入输出,看是否已指定,指定的话看路径是否存在。计算切片信息。计算完之后,将配置文件、jar包、切片信息等发送给了HDFS。

  2. 客户端向ResourceManager提交,RS会指挥调度一个NodeManager,启动一个容器container(cpu,内存),在容器里面启动一个MRAppMaster(相当于MRv1中的JobTracker)。

  3. MRAppMaster从HDFS中读取数据,计算出这个作业需要多少个Map任务,多少个Reduce任务。计算出来之后向ResourceManager请求资源,ResourceManager会调度NodeManager分配资源,NodeManager运行JVM进程,进程中运行一个MapTask或一个ReduceTask。

  4. 运行期间,NodeManager和AppMaster会进行通信,NodeManager任务运行完后会通知AppMaster,AppMaster再通知客户端任务已完成。

1560424060873

4.2 MRv2各个角色功能

客户端

  • 到RM取号,作业编号

  • 检验输入目录或文件是否存在

  • 检验输出目录是否指定,并且不存在

  • 计算切片信息

  • 将配置文件/jar包/切片信息发送到HDFS以作业编号命名的目录中(HDFS目录)

  • 向RM发送请求,提交作业

  • 监控作业执行的进度,每秒发送一次请求,请求作业执行进度,如果进度有变,则

  • 在控制台打印进度信息

  • 检查源文件是否存在,输出目录一定不能存在,切片,向resourceManager取号,将数据传到HDFS后,RM运行一个MRAPPMaster。由APPMASTER和NodeManager沟通分配资源运行。

HDFS

  • 存储配置文件/jar包/切片信息

ResourceManager

  • 调度NodeManager,让NM分配一个容器container,运行MRAppMaster程序

  • RM会调度NodeManager分配容器,用于运行map任务或者reduce任务

  • 协调集群中计算资源的分配

NodeManager

  • 分配容器(指cpu和内存),根据MRAppMaster的请求,运行指定的任务,map任务或者reduce任务

  • 当任务运行结束,要通知MRAppMaster,MRAppMaster做后续的处理

  • 启动并监控集群中的计算容器

MRAppMaster

MRAppMaster是MapReduce的ApplicationMaster实现,它使得MapReduce计算框架可以运行于YARN之上。在YARN中,MRAppMaster负责管理MapReduce作业的生命周期,包括创建MapReduce作业,向ResourceManager申请资源,与NodeManage通信要求其启动Container,监控作业的运行状态,当任务失败时重新启动任务等。

  • 负责计算的监控/失败重试/计算调度

  • 收集HDFS上的配置文件/jar包/切片信息

  • 分析出需要运行多少个Map任务,多少个reduce任务

  • 向RM发送请求,让RM分配容器,运行map任务

  • 当map任务完成5%之后,为reduce申请容器

  • 协调MapReduce作业中任务的运行,AppMaster和MapReduce任务运行于容器中,这些容器由resourcemanager调度,由nodemanager管理

4.3 MRv2:On YARN

MapReduce On YARN:MRv2

将MapReduce作业直接运行在YARN上,而不是由JobTracker和TaskTracker构建的MRv1系统中

基本功能模块

  • YARN:负责资源管理和调度
  • MRAppMaster:负责任务切分、任务调度、任务监控和容错等
  • MapTask/ReduceTask:任务驱动引擎,与MRv1一致

每个MapRduce作业对应一个MRAppMaster

  • MRAppMaster任务调度

  • YARN将资源分配给MRAppMaster

  • MRAppMaster进一步将资源分配给内部的任务

MRAppMaster容错

  • 失败后,由YARN重新启动

  • 任务失败后,MRAppMaster重新申请资源

1560426847456

YARN:解耦资源与计算
  • ResourceManager

    • 主,核心

    • 集群节点资源管理

  • NodeManager

    • 与RM汇报资源
    • 管理Container生命周期
    • 计算框架中的角色都以Container表示
  • Container:【节点NM,CPU,MEM,I/O大小,启动命令】

    • 默认NodeManager启动线程监控Container大小,超出申请资源额度,kill
    • 支持Linux内核的Cgroup
MR
  • MR-ApplicationMaster-Container

    • 作业为单位,避免单点故障,负载到不同的节点
    • 创建Task需要和RM申请资源(Container)
  • Task-Container

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

  • AM-Client:与AM交互

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值