热门标签 | 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)不能启用推测执行机制情况


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

推荐阅读
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • 深入解析Spark核心架构与部署策略
    本文详细探讨了Spark的核心架构,包括其运行机制、任务调度和内存管理等方面,以及四种主要的部署模式:Standalone、Apache Mesos、Hadoop YARN和Kubernetes。通过本文,读者可以深入了解Spark的工作原理及其在不同环境下的部署方式。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • HBase运维工具全解析
    本文深入探讨了HBase常用的运维工具,详细介绍了每种工具的功能、使用场景及操作示例。对于HBase的开发人员和运维工程师来说,这些工具是日常管理和故障排查的重要手段。 ... [详细]
  • 本文详细介绍了 Flink 和 YARN 的交互机制。YARN 是 Hadoop 生态系统中的资源管理组件,类似于 Spark on YARN 的配置方式。我们将基于官方文档,深入探讨如何在 YARN 上部署和运行 Flink 任务。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 该平台旨在为大型企业提供一个高效、灵活且可扩展的分布式微服务架构解决方案。它采用模块化、微服务化和热部署的设计理念,结合当前最先进且无商业限制的主流开源技术,如Spring Cloud、Spring Boot2、MyBatis、OAuth2和Element UI,实现前后端分离的系统管理平台。 ... [详细]
  • 本文介绍了一种在 MySQL 客户端执行 NOW() 函数时出现时间偏差的问题,并详细描述了如何通过配置文件调整时区设置来解决该问题。演示场景中,假设当前北京时间为2023年2月17日19:31:37,而查询结果显示的时间比实际时间晚8小时。 ... [详细]
  • Kubernetes 持久化存储与数据卷详解
    本文深入探讨 Kubernetes 中持久化存储的使用场景、PV/PVC/StorageClass 的基本操作及其实现原理,旨在帮助读者理解如何高效管理容器化应用的数据持久化需求。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 本文介绍了如何利用 Spring Boot 和 Groovy 构建一个灵活且可扩展的动态计算引擎,以满足钱包应用中类似余额宝功能的推广需求。我们将探讨不同的设计方案,并最终选择最适合的技术栈来实现这一目标。 ... [详细]
  • Hadoop发行版本选择指南:技术解析与应用实践
    本文详细介绍了Hadoop的不同发行版本及其特点,帮助读者根据实际需求选择最合适的Hadoop版本。内容涵盖Apache Hadoop、Cloudera CDH等主流版本的特性及应用场景。 ... [详细]
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社区 版权所有