导语 | 传统HADOOP生态系统使用YARN管理/调度计算资源,该系统⼀般具有明显的资源使⽤周期。实时计算集群资源消耗主要在⽩天,而数据报表型业务则安排在离线计算集群中。离在线业务分开部署的首要问题就是资源使用率低,消耗成本⾼。随着业务的增⻓和突发的报表计算需求,为了解决为离线集群预留资源,腾讯云EMR团队和容器团队联合推出Hadoop Yarn on Kubernetes Pod,以提⾼容器资源使用率,降低资源成本,将闲时容器集群CPU使⽤率提升数倍之多。本文主要介绍HADOOP资源调度器YARN在容器环境中的优化与实践。

一、Hadoop Yarn on Kubernetes Pod 混合部署模式

Hadoop Yarn on Kubernetes Pod 方案提供弹性扩缩容和离在线混合部署两项功能。弹性扩缩容主要聚焦于如何利⽤云原生资源,快速扩容资源以补充算力。离在线混合部署模式的目的是为了充分使用在线集群的空闲资源,尽可能减少为离线集群预留空闲资源的频次。

EMR弹性扩缩容模块(yarn-autoscaler)提供按负载和按时间弹性伸缩两种扩缩容方式。对于按负载伸缩,用户可以对不同指标设置阈值来触发扩缩容,比如设置Yarn队列中availablevcore、 pending vcore、available mem、pending mem。亦可以使用时间扩缩规则,按天、按周、按月等规则指定触发。

当弹性规则被触发后,离在线部署模块获取当前在线TKE集群中可以提供的闲置算力的规格及数量,调用Kubernetes api创建对应数量的资源,ex-scheduler扩展调度器确保Pod被创建在剩余资源更多的节点上,该POD负责启动YARN的服务。

通过该方案,Yarn的NodeManager服务可以快速部署到POD节点中。但也Yarn原生调度没有考虑异构资源,由此引发了两个问题:

1. AM的POD被驱逐,导致APP失败

在node节点的资源紧缺的条件下,kubelet为了保证node节点的稳定性,会触发主动驱逐pod的机制。如果该节点存在AM服务,则整个Application就要被视为失败,ResourceManager此时会重新分配AM。对于计算量很大的任务,Application重跑的代价不可承受。

2. Yarn原生非独占分区资源共享局限性

Yarn的标签分区特性⽀持独占分区(Exclusive),非独占分区(Non-exclusive)。

  • 独占分区(Exclusive):例如指定独占分区x,Yarn的container只会分配到该x分区。

  • 非独占分区(Non-exclusive):例如非独占分区x,x分区的资源可以共享给default分区。

    只有当指定分区default时,default上运⾏的Application可以使⽤分区x的资源。

但是在实际使⽤场景中,⽤户要给各个业务部门分配各自的独占分区资源,同时会划分出供各部门使用的default分区。default分区资源会比较充足,业务部门希望能够使用自己的独占分区和同时充分利用default分区资源,独占分区资源和default分区都不够用的时候,才会触发弹性扩容,往属于自己的独占分区中扩容资源。

二、对Yarn改造带来的挑战

对上述feature的开发,除了需求技术本⾝的难度。还需要考虑到尽可能降低用户存量集群稳定性的影响,减少用户业务侧改造成本。

  • 集群稳定性:Hadoop Yarn作为大数据系统中的基础调度组件,如果改动过多,引发的故障几率就会增大。同时引入的feature,必然需要升级存量集群的Haoop Yarn。升级操作要做到对存量业务集群无感知,不能影响到当天的业务。

  • 业务侧使用成本:引入的新feature也必须符合原⽣yarn的使用习惯,方便业务侧用户理解,同时降低业务侧对代码的改造。

1. AM自主选择存储介质

目前Yarn的社区没有考虑云上异构资源混合部署的特点。在线TKE集群中,当资源紧张时会对容器进行驱逐。为了避免Appliction重新计算,浪费资源的现象,必须提供AM可以指定能否分配到POD 类型资源。

自主选择存储介质中,使用配置化标识,由NodeManager通过RPC上报能否将资源提供给AM使用,ResourceManager通过上报信息决定将Application的AM分配到稳定资源介质中。由NodeManager通过配置化上报信息的好处是显而易见的:

  • 去集中化:减少ResourceManager处理逻辑。否则,扩容资源时,还需将资源信息通过RPC/配置流入到ResourceManager中。如无必要,勿增实体,对ResourceManager的改造应该轻量化。

  • 集群稳定性:存量业务集群对Yarn升级后,需要重启NodeManager, 只需要重启ResourceManager。Yare的高可用特性可保证升级过程对业务无影响。无需重启NodeManager 的原因是,NM默认将本机资源视为可分配。

  • 简单易用:用户可以通过配置⾃由决定任务资源拥有分配AM的权利,不单单局限POD容器资源。

2. 多标签动态分配资源

Yarn的原生标签设计中,提交任务时的标签表达式中只能含有单个标签。如果为了提⾼利用率,同时使用多个分区资源,就必须将非default分区设置为Non-exclusive特性。标签表达式必须解决如下三个问题:

  • 资源隔离:分区A设置Non-exclusive后,资源被其他分区上的APP占用后,无法及时交换给分区A的App。

  • 自由共享资源:只有default分区才有资格申请Non-exclusive分区资源。

  • 动态选择分区资源:多分区资源共享时,无法根据分区剩余资源大小选择可用区,影响任务执行效率。

腾讯云EMR团队通过支持扩展表达式语法,增加对逻辑运算符表达式的支持,使App可以申请多个分区资源。同时开发资源统计模块动态统计分区可用资源,为App分配最合适的分区。

三、实操演练

测试环境:指定172.17.48.28/172.17.48.17的NodeManager为default分区,172.17.48.29/172.17.48.26的NodeManager为x分区。

队列设置:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>a,b</value>
</property><property>
<name>yarn.scheduler.capacity.root.accessible-node-labels.x.capacity</nam e>
<value>100</value>
</property><property>
<name>yarn.scheduler.capacity.root.accessible-node-labels.y.capacity</nam e>
<value>100</value>
</property><!-- configuration of queue-a -->
<property>
<name>yarn.scheduler.capacity.root.a.accessible-node-labels</name>
<value>x</value>
</property><property>
<name>yarn.scheduler.capacity.root.a.capacity</name>
<value>50</value>
</property><property>
<name>yarn.scheduler.capacity.root.a.accessible-node-labels.x.capacity</n ame>
<value>100</value>
</property><!-- configuration of queue-b -->
<property>
<name>yarn.scheduler.capacity.root.b.accessible-node-labels</name>
<value>y</value>
</property><property>
<name>yarn.scheduler.capacity.root.b.capacity</name>
<value>50</value>
</property><property>
<name>yarn.scheduler.capacity.root.b.accessible-node-labels.y.capacity</n ame>
<value>100</value>
</property></configuration>

1. 规定AM只能分配在172.17.48.28

对另外三个节点的NodeManager节点配置如下配置项:

yarn.nodemanager.am-alloc-disabled = true

配置后,提交的Application的AM只能在172.17.48.28节点启动。

2. 使用组合标签

通过mapreduce.job.node-label-expression指定标签表达式,x||表示同时使用x/default分区。

hadoop jar /usr/local/service/hadoop/share/hadoop/mapreduce/hadoop-mapredu ce-examples-3.1.2.jar pi -D mapreduce.job.queuename="a" -D mapreduce.job. node-label-expression="x||" 10 10

使用该命令提交后,观察到Application的container被分配在x/default分区。

四、Hadoop Yarn on Kubernetes Pod 最佳实践

该客户大数据应用和存储跑在Yarn管理的大数据集群,在生产环境中,面临诸多问题,主要体现在大数据的算力不足和在线业务波谷时资源的浪费。如离线计算在算力不足时,数据准时性无法得到保证,尤其是当遇到随机紧急大数据查询任务,没有可用的计算资源,只能停掉已有的计算任务,或者等已有任务完成,⽆论哪种⽅式,总体任务执行的效率都会大打折扣。

基于Hadoop Yarn on Kubernetes Pod 方案,将离线任务自动扩容至云上集群,与TKE在线业务集群混合部署,充分利用云上波谷时段的闲置资源,提高离线业务的算力,并利用云上资源快速的弹性扩容能力,及时补充离线计算的算力

通过Hadoop Yarn on Kubernetes Pod ⽅案对客户的在线TKE集群资源使用进行优化后,集群闲时CPU使用率能提高500%。

在线集群闲时CPU占用

离在线混部后CPU占用

五、总结

本文提出了基于YARN针对云原生容器化的优化与实践,在混合部署云原生环境中,极大地提高了任务运行的稳定性,高效性,有效提高了集群资源利用率,节约硬件成本。在未来,我们会探讨更多大数据云原生场景,为企业客户带来更多的实际效益。

作者简介

张翮,腾讯云高级工程师,目前主要负责腾讯云大数据产品弹性MapReduce的管控相关模块和重要组件Hive的技术研发。向Apache Hive,Apache Calcite开源项目贡献过代码,毕业于电子科技大学。

点击文末「阅读原文」,了解腾讯云弹性 MapReduce更多信息~

腾讯云大数据

长按二维码
关注我们

腾讯云EMR基于YARN针对云原生容器化的优化与实践相关推荐

  1. 云原生容器化-1 Linux虚拟网络介绍

    背景: 本文开始引入一个新的专题--云原生容器化,用于收集云和容器化相关的文章: 以Docker和Kubernates的组成.实现原理.常见操作为主体内容,还会涉及一些云的概念:初步计划会整理出以下文 ...

  2. 阿里云 EMR 基于 Apache DolphinScheduler 产品技术实践和社区贡献

    摘要:本文整理自阿里云 EMR 数据开发团队负责人孙一凡(Evans 忆梵),在 Spark&DS Meetup 的分享.本篇内容主要分为四个部分: 1.我们是谁 2. 为什么选择 Dolph ...

  3. 体验灵雀云-创建基于Docker的云服务

    今天体验了一下灵雀云,创建了第一个基于Docker的云服务. 1.登录灵雀云 2.开始使用 登录之后,从"控制台"进入操作界面,开始创建服务. 首先需要选择一个镜像.灵雀云已经为您 ...

  4. 最佳案例 | QQ 相册云原生容器化之路

    作者 吕朋钊,腾讯业务运维高级工程师,曾负责 QQ 相册.小世界业务的存储接入层运维,现负责 AI 业务的运维. 背景 QQ 相册是 QQ 产品中为用户提供图片存储,分享等功能的成熟产品,自上线以来, ...

  5. AMS 新闻视频广告的云原生容器化之路

    作者 卓晓光,腾讯广告高级开发工程师,负责新闻视频广告整体后台架构设计,有十余年高性能高可用海量后台服务开发和实践经验.目前正带领团队完成云原生技术栈的全面转型. 吴文祺,腾讯广告开发工程师,负责新闻 ...

  6. 最佳案例 | 游戏知几 AI 助手的云原生容器化之路

    作者 张路,运营开发专家工程师,现负责游戏知几 AI 助手后台架构设计和优化工作. 游戏知几 随着业务不断的拓展,游戏知几AI智能问答机器人业务已经覆盖了自研游戏.二方.海外的多款游戏.游戏知几研发团 ...

  7. 让客户实现 AI 算力“自由”,博云与趋动科技完成算力调度容器化验证

    背景 近年来,国家对算力的重视程度不断提升.在算力基础设施方面,先后发布<全国数据中心应用发展指引>.<关于加快构建全国一体化大数据中心协同创新体系的指导意见>等:在算力服务方 ...

  8. Qunar 云原生容器化落地实践

    作者|邹晟 去哪儿网基础平台技术专家 背景 近几年,云原生和容器技术非常火爆,且日趋成熟,众多企业慢慢开始容器化建设,并在云原生技术方向上不断的探索和实践.基于这个大的趋势, 2020 年底 Quna ...

  9. 云原生|Qunar 云原生容器化落地实践

    背景 近几年,云原生和容器技术非常火爆,且日趋成熟,众多企业慢慢开始容器化建设,并在云原生技术方向上不断的探索和实践.基于这个大的趋势, 2020 年底 Qunar 也向云原生迈出了第一步--容器化. ...

最新文章

  1. YOLOv4:目标检测(windows和Linux下Darknet 版本)实施
  2. 利用npm安装/删除/发布/更新/撤销发布包
  3. HBase常用功能和HBase+MapReduce使用总结
  4. 浏览器的渲染原理简介
  5. 音视频技术开发周刊 | 234
  6. vs2010项目属性配置
  7. 友盟消息推送服务器demo,友盟消息推送总结
  8. c语言用if如何删除末尾空格,新人提问:如何将输出时每行最后一个空格删除
  9. 文件系统与linux相关知识点
  10. groovy环境搭建,配置报错
  11. 函数自执行-一元运算符
  12. 剑指offer面试题:输入某二叉树的前序遍历和中序遍历,输出后序遍历
  13. svn管理ad元件库_AD元器件库服务器管理指南
  14. CCA(典型相关分析)
  15. 重装系统后计算机无法启动,重装系统后电脑为什么启动不了?云骑士告诉你怎么办?...
  16. Mybatis(二)映射文件
  17. 监控记录交换机端口流量及性能,MSRM3一分钟搞定
  18. 机器学习-疑点1 :shape[ ]的理解
  19. Leetcode575(力扣575):分糖果
  20. AirVO: An Illumination-Robust Point-Line Visual Odometry阅读

热门文章

  1. 高效的 JavaScript
  2. zabbix-3.0.1结合grafana绘图
  3. windows下如何github ssh 公钥
  4. 细谈Ehcache页面缓存的使用
  5. MFC中OnDraw与OnPaint的区别
  6. TransCenter解读
  7. 电视机当计算机屏幕,电视机可以当电脑显示器吗
  8. 【Boost】boost库asio详解5——resolver与endpoint使用说明
  9. 简单的WinInet编程
  10. listen函数与海量用户同时登陆