1 背景

随着公司这两年业务的迅速扩增,业务数据量和数据处理需求也是呈几何式增长,这对底层的存储和计算等基础设施建设提出了较高的要求。本文围绕计算集群资源使用和资源调度展开,将带大家了解集群资源调度的整体过程、面临的问题,以及我们在底层所做的一系列开发优化工作。

2 资源调度框架—Yarn

2.1 Yarn的总体结构

从大数据的整个生态体系来说,hadoop处于离线计算的核心位置。为了实现大数据的存储和计算,hadoop1.0提供了hdfs分布式存储以及mapreduce计算框架,虽然整体具备了大数据处理的雏形,但还不支持多类型的计算框架,如后来的spark、flink,这个时候也并没有资源调度的概念。

到了hadoop2.0,为了减轻单台服务节点的调度压力,兼容各个类型的调度框架,hadoop抽离出了分布式资源调度框架—YARN(Yet Another Resource Negotiator)。Yarn在整个架构中所处的地位如图1:

Yarn通过优化后的双层调度框架,将hadoop1.0中原本需要执行资源调度和任务调度的单点JobTracker分为Resourcemanager和ApplicationMaster两个角色,分别负责集群总体的资源调度和单个任务的管理调度,而新增的Nodemanager角色负责各计算节点的管理。Yarn任务提交流程如图2:

客户端提交的任务实际由Resourcemanager直接处理,Resourcemanager为每一个任务启动ApplicationMaster,任务资源申请由ApplicationMaster直接负责,这样,各个框架通过实现自己的ApplicationMaster来管理任务,申请container作为资源,就能成功在yarn集群将任务运行起来,资源的获取对任务完全透明,任务框架和yarn完全解耦。

2.2 Yarn的调度策略

Yarn对于任务的调度在开源版本实现了3种策略,分别为先进先出(FIFO Scheduler)、容量调度(Capacity Scheduler)和公平调度(Fair Scheduler),经过社区版本演化,目前公平调度已经按队列级别实现了公平机制,我们集群采用的正是公平调度策略。

在了解几种调度策略之前我们先理解一个概念:队列。在Yarn中,队列其实就是指资源池,如果把整个集群的资源看做大的资源池的话,Yarn会根据用户配置把这个资源池进一步划分成小的资源池;父队列可以进一步向下划分,子队列会继承父队列的资源并且不会超过父队列的最大资源,整个资源队列的组织形式就像一颗多叉树。

先进先出和容量调度策略分别按任务提交顺序和为任务划分队列的方式来组织任务,这两种方式对生产环境来说并不是十分适用,因为我们的目的是让尽可能多的任务运行起来,并且尽量充分利用集群资源,而这两种策略分别会导致任务堵塞以及资源浪费。

生产环境中的公平调度遵循这样一种规则:保证任务资源分配的公平,当小任务提交过来没资源时,调度器会将大任务释放的资源留给小任务,保证了不会让大任务一直占有资源不释放。三种调度策略的组织形式如图3:

公平调度除了上述所说保证任务间的资源公平之外,还会动态调整队列大小,保证队列间的资源公平,调整依据是集群实时负载,当集群闲时,队列基本能获得配置的最大资源值;当集群忙时,调度器优先满足队列最小值,满足不了时会根据配置的最小值等参数来平均分配。

2.3 Yarn的联邦调度

在单个集群到达数千节点规模时,单台Resourcemanager实际已经接近了调度的性能瓶颈,要想进一步扩大集群规模社区给出的方案是通过联邦调度横向扩展。该方案的核心就在于Router,对外,Router提供了任务提交的统一入口;对内,Router管理了多套集群,实际任务由Router负责转发,转发到哪个集群由Router来决定。Router的实际工作流程如图4:

可以看到,通过Router管理的联邦调度方式,集群的概念实际已经对用户透明,并且在当某个集群出现问题时,Router能通过配置及时进行故障转移,将任务路由到健康的集群,从而保证了整体集群的对外服务稳定性。

3 OPPO计算集群现状

3.1 集群规模和现状

经过两年多的集群建设,目前我们的集群已经达到了比较可观的规模,在这样的集群规模下,维护稳定性其实是第一要务,我们对集群做了不少稳定性方面的工作,如权限管控、各项重要指标监控等。

除了部分稳定性建设的工作之外,另一个重点关注的是集群资源使用率,当前大部分集群资源使用有比较明显的周期性规律,从图5的集群监控能看出集群经常凌晨繁忙而白天相对空闲。

集群高峰期的资源紧张问题仅依靠集群内部自身协调其实能取得的效果有限,我们针对这种情况是考虑在凌晨高峰期与k8s联合调度,将空闲的在线资源协调部分到离线集群,后文将对该方案进行详细描述。

3.2 集群pending问题

除了高峰期的资源紧张,我们发现在白天也会出现队列任务大量pending的情况,我们对具体的pending任务进行分析,总结出了以下3种导致任务pending的问题:

1)队列配置不合理:

根据公平调度机制,队列的实时可用资源很大程度由配置的最小值决定,某些队列配置的最小值过小或为0会直接导致队列无法获取足够的资源。

另外,如果队列配置的CPU和内存比例与实际执行的任务CPU内存比差距过大,也会导致资源不足任务无法运行。

2)用户突然向某一队列提交大量任务,资源使用量超出队列上限:

这种情况实际上与用户自身的使用有关,当自身的任务量加大后,向我们提出申请来扩充队列是比较合适的。

3)有大任务占住资源不释放,导致后续提交的任务申请不到启动资源:

Spark或者Flink任务与传统的Mapreduce任务运行机制不太一样,这两类任务会长期占有资源不释放,导致新提交任务无法及时获取到资源。针对该问题,我们也设计了相应的资源抢占机制,后文详述。

总体来说,队列配置很大程度上影响了作业的运行,合理地优化配置往往能达到事半功倍的效果。

3.3 集群资源使用率现状

从上文看出监控中的集群大部分时间都处于繁忙状态,但是我们通过统计单台服务器的资源使用,发现还有很多资源的空余,如图6所示:

导致该问题的原因实际是用户作业申请的资源经常远超过实际需要的资源,我们统计发现95%的Container实际利用率低于76%, 99%的Container实际利用率低于90%。表明作业申请的资源大小存在"虚胖"问题。这部分浪费的资源如果能利用起来,其实能极大提高集群资源使用率。我们针对这部分浪费资源的优化利用也会在后续一并讨论。

4 Yarn的优化之路

4.1 Yarn联邦调度的优化

社区的联邦调度方案对于我们来说过于简单,只是实现了简单的加权随机路由。在后续计划中,我们会把更多的资源接入路由集群中,Router服务会提供统一个队列和任务管理,用户只需要把任务统一提交到Router集群,而不用关系具体到哪个集群。Router会统计所有集群的状态和负载,寻找合适的资源调度给任务。

4.2 资源编配和超卖

资源变配和资源超卖的目的是为了提升每个节点的实际资源使用效率。

资源变配:基于历史的统计值,在调度资源时,调整分配给container的资源更接近container实际需求的资源。经过我们的实践,资源变配可以提升10-20%的资源使用效率。

资源超卖:每个container运行时,都会产生一定的碎片,nodemanager可以将自己管理资源碎片收集起来,插入一些额外的container上去。我们计划通过一个额外的碎片调度器来完成这个过程,在碎片比较多时,启动一些额外的container,碎片如果减少,这些额外container会被回收掉。

4.3资源动态扩缩

为了解决资源波峰波谷的问题,我们正在与云平台合作,实现一个在线离线资源的混部框架,通过错峰的资源调度,提升资源的整体使用率。调度过程主要通过Yarn Router和OKE两个服务协调完成,在实时资源有空闲而离线资源紧张时,Yarn会向OKE申请资源,实时资源紧张时,OKE会向YARN申请回收这部分资源。同时,我们引入了自研的Remote Shuffle Service来提升动态Nodemanager的稳定性。

4.4 任务优先级管理

在实践过程中,我们发现用户任务会有明显的优先级区别,因此我们计划实现一个基于优先级的公平调度器,来保障高优先级任务的运行延时和效率。一个队列下的资源会优先保障高优先级任务,统一优先级的任务之间公平分配资源。同时,我们也实现了任务抢占功能,即使低级任务已经拿到了资源,高级别任务也可以用抢占调度来强行获取资源。

4.5 队列权限管理

Oppo yarn权限采用神盾统一鉴权,每个用户组在神盾申请队列权限。用户通过hive,livy,或者flink等客户端直接提交的任务,都会在神盾系统上进行用户的认证和队列的鉴权,无权限的用户会被拒绝访问。

5 总结

本文主要介绍了Yarn的基本工作原理及Yarn在OPPO的落地实践,总体来说可以归纳为以下几点:

  1. Yarn作为典型的双层调度架构,突破了单层调度架构的资源和框架限制,使作业的运行和资源分配更加灵活。
  2. 如何优化作业pending与如何使资源利用最大化是所有调度系统都会面临的问题,对此,我们可以从自己系统本身特点来分析,寻找适合自己的解决方案。我们认为分析可以基于现有的数据统计。
  3. 离线和在线业务的错峰特性决定了单项业务无法充分利用所有服务器资源,通过合适的调度策略组织这些资源将会极大降低服务器成本。

作者简介

Cheng OPPO后端工程师

主要负责YARN离线资源调度平台的开发和建设工作,对大数据基础平台的建设有较丰富的经验。

Zhejia OPPO高级数据平台工程师

主要负责OPPO YARN集群的开发和优化工作,在大数据计算任务调度方面有丰富的经验。

获取更多精彩内容,请扫码关注[OPPO数智技术]公众号

OPPO大数据计算集群资源调度架构演进相关推荐

  1. 迁移到其他机器_有赞大数据离线集群迁移实战

    ‍‍ 点击关注"有赞coder" 获取更多技术干货哦- 作者:郭理想 & 任海潮部门:数据中台 一.背景 有赞是一家商家服务公司,向商家提供强大的基于社交网络的,全渠道经营 ...

  2. 大数据离线集群数据迁移实战项目

    有赞大数据离线集群迁移实战 一.背景 有赞是一家商家服务公司,向商家提供强大的基于社交网络的,全渠道经营的 SaaS 系统和一体化新零售解决方案.随着近年来社交电商的火爆,有赞大数据集群一直处于快速增 ...

  3. 大数据Hadoop集群中常用的任务调度框架

    在大数据的集群环境中,经常用到的任务调度框架有如下几个,根据公司的业务的需要选择适合自己的业务调度的框架, 调度框架anzkaban,crontab(Linux自带).zeus(Alibaba).Oo ...

  4. 大数据Hadoop集群搭建

    大数据Hadoop集群搭建 一.环境 服务器配置: CPU型号:Intel® Xeon® CPU E5-2620 v4 @ 2.10GHz CPU核数:16 内存:64GB 操作系统 版本:CentO ...

  5. 四川大数据产业集群明年将基本成型

    记者从9月23日在四川绵阳举行的第四届科博会"大数据·人工智能"论坛上了解到,预计2017年,四川大数据产业集群将基本成型. 目前,四川省正在朝着向全国乃至全球大数据研究和开发基地 ...

  6. 河北将建千亿元级大数据产业集群 14朵行业云覆盖京津冀

    2016年启动建设的阿里张北云联数据中心和数据港项目一期工程已经完工,1.3万台服务器投入运营,支撑完成了2016年"双11"每秒17.5万单交易订单创建及每秒12万笔支付订单生产 ...

  7. 贵阳高新区大数据产业集群步入发展快车道

    随着数据中心.呼叫中心.大数据广场等项目的建成,科技部批复我省依托贵阳高新区等开展贵阳大数据产业技术创新试验区建设试点,贵阳高新区大数据产业集群步入发展"快车道",截至去年底,高新 ...

  8. python做大数据的框架_Python+大数据计算平台,PyODPS架构手把手教你搭建

    原文链接:http://click.aliyun.com/m/13965/ 在2016年10月的云栖社区在线培训上,来自阿里云大数据事业部的秦续业分享了<双剑合壁--Python和大数据计算平台 ...

  9. 大数据+Hadoop集群学习

    文章目录 1.课前资料 2.课程整体介绍 3.大数据介绍 什么是大数据? 为什么要学习大数据? 大数据相关技术 海量数据存储 海量数据清洗 海量数据处理 4.集群环境准备 4.1准备虚拟机 4.2修改 ...

最新文章

  1. Centos7 下 配置 rsync 以及 rsync+inotify 实时同步
  2. WPF ,listbox,平滑滚动的2种方式。
  3. 基本数据类型_JavaScript基本数据类型
  4. hibernate oracle boolean 数据类型,用hibernate向oracle读取blob数据类型为并下载到本地...
  5. 使用xsodata文件将SAP HANA CDS view暴露成OData服务
  6. 搜狐视频Redis私有云cachecloud开源了
  7. 制作centos安装u盘
  8. Adobe illustrator 拼图模板制作 - 连载21
  9. 5个小技巧让你写出更好的 JavaScript 条件语句
  10. 使用 SourceTree 遇到冲突的解决方法
  11. 10. 大型网站核心架构要素
  12. 以太坊 solidity 函数修饰符总结 public、private、internal、external、view、pure的区别
  13. Lucene Automaton(三)
  14. elasticsearch简介 搜索引擎全文搜索引擎
  15. 主流漫游技术-OKC802.11r介绍
  16. 爬虫项目开发与实践,附东方财富7x24小时实时信息代码
  17. JavaScript字符统计出现次数
  18. SpringBoot的高级教程
  19. Debian修改桌面系统
  20. 00后女记者的一场直播挑战,触动了多少城市年轻打工人的心

热门文章

  1. 暗黑破坏神2重置版 反调保护分析
  2. 第4章 - Java面向对象
  3. perf 程序追踪 USDT 用户态程序静态跟踪点
  4. 一分钟了解探地雷达,地质雷达
  5. 光纤到户、FTTH的概念。
  6. 利用STM32CubeMX配置基于STMF32F407的FREERTOS操作系统控制直流电机速度和超声波测距实验
  7. 红象云腾CRH 一键部署大数据平台
  8. php 检查磁盘,window_Win7系统中关闭检查磁盘和扫描并修复提示的方法, Win7系统关闭“检查磁盘r - phpStudy...
  9. 最近单位让草理的一个东西 软件包及其服务标准介绍
  10. Git本地远程仓库的搭建(局域网内也可提交)