热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hadoop之Yarn

目录1Hadoop1.x和Hadoop2.x架构区别2Yarn概述3Yarn基本架构4Yarn工作机制5作业提交全过程6资源调度器7任务的推测执行1Hadoop1.x和Hadoo

目录
    1 Hadoop1.x和Hadoop2.x架构区别
    2 Yarn概述
    3 Yarn基本架构
    4 Yarn工作机制
    5 作业提交全过程
    6 资源调度器
    7 任务的推测执行

1 Hadoop1.x和Hadoop2.x架构区别


  • 在Hadoop1.x时代,Hadoop中的MapReduce同时处理业务逻辑运算和资源的调度,耦合性较大。

  • 在Hadoop2.x时代,增加了Yarn。Yarn只负责资源的调度,MapReduce只负责运算

2 Yarn概述

    Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。

3 Yarn基本架构

    YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成。

Yarn架构

4 Yarn工作机制

(1)Yarn运行机制

yarn工作机制

(2)yarn工作机制详解


  • (0)Mr程序提交到客户端所在的节点。
  • (1)Yarnrunner向Resourcemanager申请一个Application。
  • (2)rm将该应用程序的资源路径返回给yarnrunner。
  • (3)该程序将运行所需资源提交到HDFS上。
  • (4)程序资源提交完毕后,申请运行mrAppMaster。
  • (5)RM将用户的请求初始化成一个task。
  • (6)其中一个NodeManager领取到task任务。
  • (7)该NodeManager创建容器Container,并产生MRAppmaster。
  • (8)Container从HDFS上拷贝资源到本地。
  • (9)MRAppmaster向RM 申请运行maptask资源。
  • (10)RM将运行maptask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。
  • (11)MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动maptask,maptask对数据分区排序。
  • (12)MrAppMaster等待所有maptask运行完毕后,向RM申请容器,运行reduce task。
  • (13)reduce task向maptask获取相应分区的数据。
  • (14)程序运行完毕后,MR会向RM申请注销自己。

5 作业提交全过程

作业提交全过程详解
(1)作业提交


  • 第0步:client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。
  • 第1步:client向RM申请一个作业id。
  • 第2步:RM给client返回该job资源的提交路径和作业id。
  • 第3步:client提交jar包、切片信息和配置文件到指定的资源提交路径。
  • 第4步:client提交完资源后,向RM申请运行MrAppMaster。

(2)作业初始化


  • 第5步:当RM收到client的请求后,将该job添加到容量调度器中。
  • 第6步:某一个空闲的NM领取到该job。
  • 第7步:该NM创建Container,并产生MRAppmaster。
  • 第8步:下载client提交的资源到本地。

(3)任务分配


  • 第9步:MrAppMaster向RM申请运行多个maptask任务资源。
  • 第10步:RM将运行maptask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。

(4)任务运行


  • 第11步:MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动maptask,maptask对数据分区排序。
  • 第12步:MrAppMaster等待所有maptask运行完毕后,向RM申请容器,运行reduce task。
  • 第13步:reduce task向maptask获取相应分区的数据。
  • 第14步:程序运行完毕后,MR会向RM申请注销自己。

(5)进度和状态更新
    YARN中的任务将其进度和状态(包括counter)返回给应用管理器, 客户端每秒(通过mapreduce.client.progressmonitor.pollinterval设置)向应用管理器请求进度更新, 展示给用户。

(6)作业完成
    除了向应用管理器请求作业进度外, 客户端每5分钟都会通过调用waitForCompletion()来检查作业是否完成。时间间隔可以通过mapreduce.client.completion.pollinterval来设置。大数据学习扣群522189307,获取系统课程,作业完成之后, 应用管理器和container会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。

6 资源调度器

    目前,Hadoop作业调度器主要有三种:FIFO、Capacity Scheduler和Fair Scheduler。Hadoop2.7.2默认的资源调度器是Capacity Scheduler。
具体设置详见:yarn-default.xml文件

The class to use as the resource scheduler.yarn.resourcemanager.scheduler.classorg.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler

(1)先进先出调度器(FIFO)

FIFO


  • 优点:调度算法简单,JobTracker工作负担轻。
  • 缺点:忽略了不同作业的需求差异。例如如果类似对海量数据进行统计分析的作业长期占据计算资源,那么在其后提交的交互型作业有可能迟迟得不到处理,从而影响到用户的体验。

(2)容量调度器(Capacity Scheduler)===>Yahoo开发

Capacity Scheduler


  • 1.多队列支持,每个队列采用FIFO

  • 2.为了防止同一个用户的作业独占队列中的资源,该调度器会对同一个用户提交多的作业所占资源量进行限定

  • 3.首先,计算每个队列中正在运行的任务数与其应该分得的计算资源之间的比值,选择一个该比值最小的队列

  • 4.其次,根据作业的优先级和提交时间顺序,同时考虑用户资源量限制和内存限制对队列内任务排序

  • 5.三个队列同时按照任务的先后顺序依次执行,比如,job1,job21和job31分别排在队列最前面,是最先运行,也是同时运行

    该调度默认情况下不支持优先级,但是可以在配置文件中开启此选项,如果支持优先级,调度算法就是带有优先级的FIFO。

    不支持优先级抢占,一旦一个作业开始执行,在执行完之前它的资源不会被高优先级作业所抢占。

    对队列中同一用户提交的作业能够获得的资源百分比进行了限制以使同属于一用户的作业不能出现独占资源的情况。

(3)公平调度器(Fair Scheduler)===>Facebook开发

Fair Scheduler


  • 1.支持多队列多用户,每个队列中的资源量可以配置,同一个队列中的作业公平共享队列中所有资源

  • 2.比如有三个队列A,B,C.每个队列中的job按照优先级分配资源,优先级越高分配的资源越多,但是每个job都分配到资源以确保公平。在资源有限的情况下,每个job理想情况下,获得的计算资源与实际获得的计算资源存在一种差距,这个差距叫做缺额。同一个队列,job的资源缺额越大,越先获得的资源优先执行,作业是按照缺额的高低来先后执行的,而且可以看到上图有多个作业同时运行

7 任务的推测执行

    推测执行(Speculative Execution)是指在集群环境下运行MapReduce,可能是程序Bug,负载不均或者其他的一些问题,导致在一个JOB下的多个TASK速度不一致,比如有的任务已经完成,但是有些任务可能只跑了10%,根据木桶原理,这些任务将成为整个JOB的短板,如果集群启动了推测执行,这时为了最大限度的提高短板,Hadoop会为该task启动备份任务,让speculative task与原始task同时处理一份数据,哪个先运行完,则将谁的结果作为最终结果,并且在运行完成后Kill掉另外一个任务。

(1)作业完成时间取决于最慢的任务完成时间
    一个作业由若干个Map任务和Reduce任务构成。因硬件老化、软件Bug等,某些任务可能运行非常慢。
    典型案例:系统中有99%的Map任务都完成了,只有少数几个Map老是进度很慢,完不成,怎么办?

(2)推测执行机制:
    发现拖后腿的任务,比如某个任务运行速度远慢于任务平均速度。为拖后腿任务启动一个备份任务,同时运行。谁先运行完,则采用谁的结果。

(3)执行推测任务的前提条件


  • 每个task只能有一个备份任务;
  • 当前job已完成的task必须不小于0.05(5%)
  • 开启推测执行参数设置,mapred-site.xml文件中默认是打开的

mapreduce.map.speculativetrueIf true, then multiple instances of some map tasks may be executed in parallel.
mapreduce.reduce.speculativetrueIf true, then multiple instances of some reduce tasks may be executed in parallel.

(4)不能启用推测执行机制情况


  • 任务间存在严重的负载倾斜;
  • 特殊任务,比如任务向数据库中写数据

推荐阅读
  • ZooKeeper集群脑裂问题及其解决方案
    本文深入探讨了ZooKeeper集群中可能出现的脑裂问题,分析其成因,并提供了多种有效的解决方案,确保集群在高可用性环境下的稳定运行。 ... [详细]
  • 深入解析BookKeeper的设计与应用场景
    本文介绍了由Yahoo在2009年开发并于2011年开源的BookKeeper技术。BookKeeper是一种高效且可靠的日志流存储解决方案,广泛应用于需要高性能和强数据持久性的场景。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • NTP服务器配置详解:原理与工作模式
    本文深入探讨了网络时间协议(NTP)的工作原理及其多种工作模式,旨在帮助读者全面理解NTP的配置参数和应用场景。NTP是基于RFC 1305的时间同步标准,广泛应用于分布式系统中,确保设备间时钟的一致性。 ... [详细]
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
  • 深入解析Spring Cloud微服务架构与分布式系统实战
    本文详细介绍了Spring Cloud在微服务架构和分布式系统中的应用,结合实际案例和最新技术,帮助读者全面掌握微服务的实现与优化。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • 在Java开发中,使用BASE64编码通常可以直接利用JDK内置的库。然而,在Android平台上,由于安全性和兼容性的考虑,直接引用JDK中的`sun.misc.BASE64Decoder`会导致错误,因此需要引入第三方库来实现相同的功能。 ... [详细]
  • 基于结构相似性的HOPC算法:多模态遥感影像配准方法及Matlab实现
    本文介绍了一种基于结构相似性的多模态遥感影像配准方法——HOPC算法,该算法通过相位一致性模型构建几何结构特征描述符,能够有效应对多模态影像间的非线性辐射差异。文章详细阐述了HOPC算法的原理、实验结果及其在多种遥感影像中的应用,并提供了相应的Matlab代码。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • 本文介绍了如何利用 Spring Boot 和 Groovy 构建一个灵活且可扩展的动态计算引擎,以满足钱包应用中类似余额宝功能的推广需求。我们将探讨不同的设计方案,并最终选择最适合的技术栈来实现这一目标。 ... [详细]
  • 本题探讨了在大数据结构背景下,如何通过整体二分和CDQ分治等高级算法优化处理复杂的时间序列问题。题目设定包括节点数量、查询次数和权重限制,并详细分析了解决方案中的关键步骤。 ... [详细]
  • 本指南详细介绍了如何在 CentOS 7.0 系统上部署 Spring Boot 2.x 应用程序,包括必要的配置和步骤。 ... [详细]
author-avatar
xuncijins
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有