加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Hadoop YARN:调度性能优化实践

发布时间:2019-08-04 00:48:56 所属栏目:教程 来源:世龙、廷稳
导读:配景 YARN作为Hadoop的资源打点体系,认真Hadoop集群上计较资源的打点和功课调治。 美团的YARN以社区2.7.1版本为基本构建分支。今朝在YARN上支撑离线营业、及时营业以及呆板进求学务。 离线营业首要运行的是Hive on MapReduce, Spark SQL为主的数据客栈作
副问题[/!--empirenews.page--]

配景

YARN作为Hadoop的资源打点体系,认真Hadoop集群上计较资源的打点和功课调治。

美团的YARN以社区2.7.1版本为基本构建分支。今朝在YARN上支撑离线营业、及时营业以及呆板进求学务。

  • 离线营业首要运行的是Hive on MapReduce, Spark SQL为主的数据客栈功课。
  • 及时营业首要运行Spark Streaming,Flink为主的及时流计较功课。
  • 呆板进求学务首要运行TensorFlow,MXNet,MLX(美团点评自研的大局限呆板进修体系)等计较功课。

YARN面对高可用、扩展性、不变性的题目许多。个中扩展性上碰着的最严峻的,是集群和营业局限增添带来的调治器机能题目。从营业角度来看,假设集群1000台节点,每个节点提供100个CPU的计较手段。每个使命行使1个CPU,均匀执行时刻1分钟。集群在岑岭期始终有高出10万CPU的资源需求。集群的调治器均匀每分钟只能调治5万的使命。从分钟级别调查,集群资源行使率是50000/(100*1000)=0.5,那么集群就有50%的计较资源由于调治手段的题目而无法行使。

跟着集群局限扩大以及营业量的增添,集群调治手段会跟着压力增进而逐渐降落。假设调治手段依然保持稳固,每分钟调治5万个使命,凭证5000台节点的局限计较,假如不做任何优化改造,那么集群资源行使率为:50000/(100*5000) = 10%,剩余的90%的呆板资源无法被操作起来。

这个题目办理后,集群在有空余资源的环境下,功课资源需求可以快速获得满意,集群的计较资源获得充实地操作。

下文会慢慢将Hadoop YARN调治体系的焦点模块睁开声名,揭开上述机能题目的基础缘故起因,提出体系化的办理方案,最终Hadoop YARN到达支撑单集群万级别节点,支持并发运行数万功课的调治手段。

整体架构

YARN架构

YARN认真功课资源调治,在集群中找到满意营业的资源,辅佐功课启动使命,打点功课的生命周期。

资源抽象

YARN在cpu,memory这两个资源维度对集群资源做了抽象。

  1. class Resource{ 
  2.   int cpu;   //cpu焦点个数 
  3.   int memory-mb; //内存的MB数 

功课向YARN申请资源的哀求是:List[ResourceRequest]

  1. class ResourceRequest{ 
  2.   int numContainers; //必要的container个数 
  3.   Resource capability;//每个container的资源 

YARN对功课相应是:List[Container]

  1. class Container{ 
  2.   ContainerId containerId; //YARN全局独一的container标示 
  3.   Resource capability;  //该container的资源信息 
  4.   String nodeHttpAddress; //该container可以启动的NodeManager的hostname 

YARN调治架构

Hadoop YARN:调治机能优化实践

YARN调治器

名词表明

  • ResourceScheduler是YARN的调治器,认真Container的分派。
  • AsyncDispatcher是单线程的变乱分发器,认真向调治器发送调治变乱。
  • ResourceTrackerService是资源跟踪处事,首要认真吸取处理赏罚NodeManager的心跳信息。
  • ApplicationMasterService是功课的RPC处事,首要认真吸取处理赏罚功课的心跳信息。
  • AppMaster是功课的措施节制器,认真跟YARN交互获取/开释资源。

调治流程

  1. 功课资源申请进程:AppMaster通过心跳奉告YARN资源需求(List[ResourceRequest]),并取回前次心跳之后,调治器已经分派好的资源(List[Container])。
  2. 调治器分派资源流程是:Nodemanager心跳触发调治器为该NodeManager分派Container。

资源申请和分派是异步举办的。ResourceScheduler是抽象类,必要自行实现。社区实现了公正调治器(FairScheduler)和容量调治器(CapacityScheduler)。美团点评按照自身的营业模式的特点,回收的是公正调治器。

公正调治器

功课的组织方法

在公正调治器中,功课(App)是挂载如下图的树形行列的叶子。

Hadoop YARN:调治机能优化实践行列布局

焦点调治流程

Hadoop YARN:调治机能优化实践

焦点调治流程
  1. 调治器锁住FairScheduler工具,停止焦点数据布局斗嘴。
  2. 调治器选取集群的一个节点(node),从树形行列的根节点ROOT开始出发,每层行列城市凭证公正计策选择一个子行列,最后在叶子行列凭证公正计策选择一个App,为这个App在node上找一块适配的资源。

对付每层行罗列办如下贱程:

  1. 行列预先搜查:搜查行列的资源行使量是否已经高出了行列的Quota
  2. 排序子行列/App:凭证公正调治计策,对子行列/App举办排序
  3. 递归调治子行列/App

譬喻,某次调治的路径是ROOT -> ParentQueueA -> LeafQueueA1 -> App11,这次调治会从node上给App11分派Container。

伪代码

  1. class FairScheduler{ 
  2.   /* input:NodeId 
  3.    *  output:Resource 暗示分派出来的某个app的一个container的资源量 
  4.    *  root 是树形行列Queue的根 
  5.    */ 
  6.   synchronized Resource attemptScheduling(NodeId node){ 
  7.     root.assignContainer(NodeId); 
  8.   } 
  9.  
  10. class Queue{ 
  11.   Resource assignContainer(NodeId node){ 
  12.     if(! preCheck(node) ) return;  //预先搜查 
  13.       sort(this.children);  //排序 
  14.     if(this.isParent){ 
  15.       for(Queue q: this.children) 
  16.         q.assignContainer(node);  //递归挪用 
  17.     }else{ 
  18.       for(App app: this.runnableApps) 
  19.         app.assignContainer(node); 
  20.     } 
  21.   } 
  22.  
  23. class App{ 
  24.   Resource assignContainer(NodeId node){ 
  25.     ...... 
  26.   } 

公正调治器架构

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读