2、MapReduce与YARM

 

MapReduce 离线计算引擎

 

一、Mapreduce 的基本概念

 

Mapreduce 是一个分布式的计算框架,提供计算的模型,框架和平台,它易于编程,我们在进行功能组件开发的时候只需要通过代码表达我们需要做什么就可以,具体的计算和操作交由执行框架进行处理即可。如果平台性能无法满足我们的需求的时候,我们只需要按需拓展我们的节点,通过 Scale-out 来进行性能线性拓展,而本身平台又提供了高容错性,我们可以通过计算迁移或者数据迁移操作,当节点出现故障的时候不会影响我们的现有业务。

 

它包含以下三层含义:

 

(1)MapReduce 是基于集群的高性能并行计算平台(ClusterInfrastructure)。这里主要是指其在 Hadoop 中作为一个组件被使用,MapReduce 在大数据平台中提供的是一个离线的分布式计算引擎。其可以和底层的存储相关的组件进行交互,将文件进行计算和其他相关的操作。

 

(2)MapReduce 是一个并行计算与运行软件框架(SoftwareFramework)。

 

作为一个软件框架,MapReduce 主要是被使用在编程语句中,进行相关的软件编译,比如其在 Python 中就作为了一个语句固件被编程者使用。

 

(3)MapReduce 是一个并行程序设计模型(ProgrammingModel&Methodology)。在早期谷歌提出 MapReduce 的设计思想时,其实它并没有一个专门的作用领域,而是作为一个思想来使用,它提供了计算的方法,所以在实际中,我们还可以按照这种设计模型和思想进行其他相关的开发。

MapReduce 具有如下的特点:

 

(1)易于编程:程序员仅需描述做什么,具体怎么做交由系统的执行框架处理。(2)良好的扩展性:可通过添加节点以扩展集群能力。

 

(3)高容错性:通过计算迁移或数据迁移等策略提高集群的可用性与容错性。

 

MapReduce 从诞生到目前的发展中主要的版本有以下几个:MR1.3.0、MR1.3.1、MR1.5.0、MR1.5.1,但是在 MapReducev1 中,也同时存在以下几个致命性的缺点:(1)拓展性受限,由于 MapReduce 在早期需要自己去维护节点,所以 Mapreduce 虽然拓展性很好,但是拓展是有限度的,无法进行无限的拓展。

 

MapReduce 作为一个计算引擎,其在早期的设计思路中,由于是独立于所有组件存在的所以他除了需要进行相关的计算操作以外,还需要对自己所搭载的平台进行相关的维护操作。这样的话,MapReduce 除了计算就还要对设备提供一部分的资源进行维护操作,那么设备越多我们为了维护设备所需要从 MapReduce 中提供的资源也就越多。这样的话,设备多虽然可以提高计算的效率,但是设备数目过大的时候,维护的开销就会高于设备所能提供的资源了。这样就会到达一个平衡点。也就是指 MapReduce 在这种情况下就无法无限拓展了,所以其能够计算的数据也就有了上限,但是这样的话,就无法满足数据增长的计算需求。

 

(2)单点故障:MapReduce 是部署在单个节点上的,所以一旦出现问题之后, MapReduce 就会直接无法使用,产生单点故障由于早期的 MapReduce 是一个单进程的引擎,和其他的组件不同的是,其他组件

 

都会有对应的保护措施,不管是对进程还是对数据,那么 MapReduce 没有提供任何的保护机制,一旦计算出现问题,那么就直接中断。MapReduce 作为一个离线

计算引擎,其主要提供的是针对于大量的数据的计算工作,计算的周期会很长,那么一旦出现问题,计算中断就会导致之前的计算全部失效。

 

(3)不支持 MR 之外的计算:MapReduce 只支持离线计算,对于在线计算和流处理计算的大量需求无法满足,也就导致了其计算的滞后性。

 

这里主要想要表达的是 MapReduce 对于计算引擎之间的低效问题。由于 MapReduce 本身只提供对海量文件的计算,那么从其设计的角度上来讲,就是提供大量文件的计算操作。对于延迟敏感型的业务或者是有其他相关需求的计算都是无法满足的,那么这样就会导致其出现计算的单一性,没有很广泛的适用性。(4)计算框架之间无法进行共享,资源利用率低:目前我们使用的计算引擎主要有 MapReduce、Storm、Spark 等,不同的框架采用的不同的计算方法,框架之间 MapReduce 不支持进行数据共享就导致了其对于资源的利用率过低的问题。

如上图所示:由于在早期,我们的存储组件是直接对接的计算引擎的,而计算引擎之间又无法做相关的共享操作,所以这个时候如果组件与组件之间需要做相关的数据共享,或者中间结果共享,那么就会出现问题,MapReduce 作为计算引擎必须将自己的计算结果先存入到底层的存储组件中,才能被其他组件调用到,那么数据下盘第一个会造成的问题在于,这里的数据作为一个临时结果对于 HDFS 等存储组件来说,认知就是一个数据,那么就会启用对应的保护机制,以及元数据修改等操作,而且本身数据下盘就要消耗时间,所以整个流程,会耗费掉大量的时间,而且一个计算过程中间会出现多次调用,那么这种过程就会持续多次,整体的进程非常消耗相关的计算资源,而且如果这些组件都部署在一台节点上,本身在内存中进行数据转换就可以完成的事情,这里必须要执行相当复杂的操作才能执行完成。所以资源的利用率和任务的执行时间都是非常的差的。

 

 

二、Yarn 简介

 

Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。

 

Yarn 的出现主要是为了解决上边我们说到的 MapReduce v1 版本的问题,其实 MapReduce 的问题也是同样出现在其他的计算引擎中的,所以 Yarn 的出现不仅仅是解决了 MapReduce 的问题还将以往离散的不关联的各个组件在底层柔和为了一体,那么 Yarn 主要带来了以下的几个好处࿱

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值