• Hadoop2.0之YARN


    YARN(Yet Another Resource Negotiator)是Hadoop2.0集群中负责资源管理和调度以及监控运行在它上面的各种应用,是hadoop2.0中的核心,它类似于一个分布式操作系统,通过它的api编写的应用可以跑在它上面,支持临时和常驻的应用,集群的资源可以得到最大限度的共享。资源是指CPU,内存,硬盘,带宽等可以量化的东西。

    Hadoop1.0和2.0架构对比

    • 1.0的绝对核心是mapreduce,只能跑mapreduce的任务;2.0的绝对核心是YARN,除了可以跑mapreduce,还可以跑其它各种各样的任务,每个应用向YARN申请资源
    • 1.0的JobTracker和NameNode是单点,一旦挂掉,整个集群会瘫痪;2.0核心组件不再是单点,基于ZooKeeper实现了HA(RM Hadoop2.4版本及后才支持)
    • 2.0没有了JobTracker和TaskTracker,增加了ResourceManager,NodeManager,Application Master,Container
    • 2.0资源使用效率更高,资源使用更加弹性灵活
    • 2.0把资源管理以及调度和任务管理以及调度拆开,使得组件功能变得更简单,程序更加稳定健壮,1.0时都由JobTracker负责
    • 2.0比1.0架构更加复杂了
    • YARN的出现解决了1.0时代设计的缺陷,让Hadoop集群功能越来越完善,让Hadoop集群越来越稳定

    YARN架构设计


    (图片来源:hadoop官方文档)

    • Client客户端,提交任务到ResourceManager
    • ResourceManager(RM),负责接收任务,管理集群中的资源和调度,以及监控运行在YARN上的应用,它有2个核心的组件:1 可插拔的Scheduler资源调度器,2 ResoucerManagerApplicationMaster管理和监控应用
    • NodeManager(NM),负责管理单台机器的资源,通过心跳定时上报机器资源状态,启动和停止和监控Container,定时检查机器可用情况
    • ApplicationMaster(AM),运行在NM Container上的程序,由RM选择某台NM上的某个Container来运行这个程序,AM负责向RM申请应用所需资源,协调NM启动Container,负责应用任务的管理和调度,通过心跳定时向RM上报任务执行情况
    • Container,资源容器,不限定应用类型,可以跑任何任务,比如map任务,reduce任务,spark driver任务等,资源类型有:CPU,内存,硬盘,带宽等可量化的东西或者它们的组合。资源需要按照最小单位的倍数申请。
    • 执行流程概述;
      1 客户端准备好任务各种资源,包括代码,依赖包,配置文件等,通过RM客户端向RM提交任务
      2 RM进行权限检查和集群负载情况,如果通过,接受提交的任务,加入任务队列,等待调度器调度
      3 当有空闲资源时,RM选择一个NM,指示NM启动一个Container运行这个任务的AM
      4 这个应用的AM启动后,AM看看自己完成任务需要多少资源,然后向RM Scheduler申请资源
      5 Scheduler根据策略分配资源,返回资源信息给AM
      6 AM拿到已分配的资源信息后,协商NM启动Container,然后在Container运行自己的任务程序
      7 AM调度自己的任务,监控自己的任务状态(Container和AM通信),并定时向RM汇报任务状态
      8 AM执行完成,释放Container资源
    • RM出现异常;其它备份的RM接管,新的RM通知AM重新启动
    • NM出现异常:RM监控到NM异常,RM通知AM,AM做进一步处理
    • AM出现异常:RM负责重新启动AM,RM已经记录了AM任务状态信息,已经完成的任务不会再执行

    RM实现HA


    (图片来源:hadoop官方文档)

    • 大于等于2.4版本才支持HA
    • RM有2种状态,提供服务的处于Active状态,备份的是Standby状态
    • 通过ZooKeeper协调,实现故障转移
    • RM有内置ZKFC,只需开启配置,不需要单独启动额外的监控进程
    • RM状态信息存储方式:
      1 ZooKeeper
      2 HDFS
      3 本地文件系统,故障转移需要考虑信息如何同步,人工实现故障转移

    调度策略

    • FIFO Scheduler(先进先出)
      先来的先执行,如果有任务执行时间长,占用资源多,后面的任务只能等待,即使是执行快,占用资源少的应用,也必须等待那个耗时耗资源的任务执行完
    • Capacity Scheduler(预先分配资源模式)
      N个任务队列,每个队列分配一定资源,每个队列资源互不共享,每个队列只有有权限的人或者组织才能使用。
      如果某些任务队列没有任务,会造成资源的浪费。相比FIFO模式,任务执行时间会变的更长,因为耗时耗资源的应用可用资源更少了。
    • Fair Scheduler(公平调度模式)
      先来的任务先执行,当有新的任务到来时,虽然上一个任务没有执行完,上一个任务释放的Container优先分配给这个新任务,当新任务执行完成时,释放的资源再给上一个任务使用。
      这样就能达到即不影响耗时的任务又能执行执行新任务的目的。在兼顾公平使用的基础上,最大化利用集群的资源。

    参考资料

    【0】八斗学院内部YARN学习资料
    【1】YARN官方文档
    http://hadoop.apache.org/docs/r2.6.5/hadoop-yarn/hadoop-yarn-site/YARN.html

  • 相关阅读:
    Catalan数,括号序列和栈
    NOIP2017 心路历程
    [Code Festival 2017 qual A] C: Palindromic Matrix
    HIVE 数据类型
    HADOOP-HIVE学习笔记(3)- Beeline
    HADOOP-HIVE学习笔记(2) CLI
    中信证券 指标公式 笔记
    【转】Python将列表数据写入文件(txt, csv,excel)
    Python中创建二维数组
    DevExpress 控件汉化方法
  • 原文地址:https://www.cnblogs.com/wadeyu/p/9696080.html
Copyright © 2020-2023  润新知