查看原文
其他

Yarn 混合部署方案在好未来的实现

常刚 好未来技术 2023-03-15

背景:Kubernetes(k8s)/ack是一个开源的容器集群管理系统。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。

由于大数据集群资源使用庞大,成本高。资源使用存在潮汐现象,同样公司的业务体系也存在潮汐现象,并且对比资源使用情况,大数据集群和业务体系服务器正好形成错峰资源使用状态。线上业务只有白天会吃资源比较多,晚上所占的服务器资源比较空闲,这样可以让资源紧张的大数据生态去充分利用业务体系的空闲资源。结合k8s动态伸缩特性可以支持晚上大数据生态弹性错峰调度业务体系资源,达到资源共享目的,有效的节省成本,提高服务器资源利用率。

01

在离线混部实现方案

1、目标

  • 资源共享,缓解“潮汐现象”;

  • 推进云原生方案快速落地;

  • 集群快速的弹性伸缩。

2、在离线混部方案

通过k8s的弹性扩缩能力,实现nodemanager的弹性扩缩容。具体方案图如下:

在离线混部方案实现过程

改造RM支持pod-NM的注册,主要解决了node_allow、nm address地址识别、网络、keytab自动生成等问题。完成RM的改造,k8s启动的pod-NM在RM中可以识别到并可以通过RM调度。

Pod镜像的适配由CDH安装部署方式调整为由pod中脚本拉起方式,主要解决了目录适配、权限适配、ldap适配、kerberos适配等。

Yarn node lable的实现,在FSAppAttempt assign container里面实现,添加检查:如果是k8s队列,判断当前节点是否是k8s节点,如果是分配container。

3、错峰调度方案

错峰调度方案是在离线混部方案的升级版本,主要实现了和业务错峰使用资源,具体方案如下:

错峰调度方案是在离线混部方案的基础上增加了定时拉起pod-NM功能和定时驱离pod-NM功能。

02

Yarn和k8s压测对比数据

考虑到yarn集群和k8s的集群的特性,是否对job执行效率有影响,这次主要针对做的是hive和spark。
为了让业务稳定且不影响效率的前提下,任务运行到k8s上,需要科学的压测。经调研,业界有代表性的压测工具是TPC-DS和Terasort,这两个压测工具可以准确的压测反馈出集群的性能。

1、TPC-DS测试

1.hive组件压测

说明:分别用52个有效sql进行1TB、3TB、10TB的压测数据统计汇总对比,其中每个sql都会用到sum、avg、group by、order by、子查询、join等语法

a)1TB数据测试

总时长,yarn:5时35分58秒,k8s: 5时35分29秒,k8s快29秒,如下图

52个sql执行时间对比图如下:

b)3TB数据压测

总时长,yarn: 7时42分31秒,k8s: 7时46分41秒,yarn快4分10秒,如下图

52个sql执行时间对比图如下

c)10TB数据压测

总时长,yarn: 12时42分24秒,k8s: 12时51分52秒,yarn快9分28秒,如下图

52个sql执行时间对比图如下

小结:tpc-ds分别在yarn和k8s计算节点上压测hive 52个sql的1TB、3TB、10TB数据,从分析统计数据和如上图看出,1TB数量的情况k8s有明显的优势,3TB和10TB的数据yarn具备优势,但是总体yarn和k8s节点环境hive作业执行效率差距不大,10TB以内的数据相差范围在1.5%以内,如下图:

2.spark组件压测

说明:程序分别进行1TB、3TB、10TB数据的压测数据汇总分析。

yarn执行时间分别是:1时8分30秒、2时50分27秒、8时51分49秒,k8s执行时间分别是:1时7分59秒、2时48分59秒、8时47分26秒,k8s分别快了31秒、88秒、263秒。

yarn和k8s压测1TB、3TB、10TB数据对比图如下:

小结:tpc-ds压测spark 程序运行1TB、3TB、10TB数据,从分析统计数据和如上图看出,由于spark是内存计算型,因此yarn和k8s节点上spark程序执行效率相差不大,10TB以内的数据相差百分比范围在1%以内,如下图:

2、Terasort压测

说明:terasort按照10TB数据进行压测

hadoop组件压测,计算使用了90000map数和10000reduce数,执行平均时间yarn: 4时2分11秒,k8s: 5时19分9秒,10TB数据平均相差了1时26分10秒,两环境压测对比图如下:

小结:terasort 10TB数据压测hadoop组件,由于在yarn上执行存在短路读现象,因此yarn要比k8s快了一个半小时.

1.spark组件压测

执行时间yarn:3时19分2秒,ack:2时27分1秒,k8s节点执行快了52分1秒,cdh和ack节点压测对比图如下:

小结:terasort压测hadoop和spark 10TB 数据,k8s执行效率快了52分1秒,但是总体差距不大。

3、压测总结

在yarn和k8s测试对比来看,MR程序在yarn(存在数据短路读)中有一定优势,从测试数据看会快1.5%。SPARK程序在yarn和k8s中耗时相当,从整体测试看在离线混部yarn和k8s相差不大,任务可以稳定的运行在yarn和k8s.

03

在离线混部生产运行情况

目前在离线混部方案,生产环境k8s有1000vcore资源,每天稳定运行600+任务。

生产环境已经完成驱逐container测试,可以在不影响任务的情况下驱逐pod-NM,为错峰调度实现提供了环境。

生产环境k8s任务和yarn任务时长对比,从图中可以看出,k8s队列和yarn队列任务运行时长大部分集中在5分钟以内。

04

未来规划

1、存在问题

pod-NM资源固定:目前独立使用k8s为主,没有形成自动扩缩容。

规则固定:上线下线pod-NM不够灵活安全。

2、未来规划

云原生已经在整个互联网行业形成越来越明显的优势,大数据生态正在加速拥抱云原生。从成本角度和技术角度如何做好大数据生态的云原生?灵活的动态伸缩,智能化的动态预判,全链路的大数据生态和k8s监控。组成有效,可控的大数据在离线混部方案。逐步形成计算与存储分离,根据任务和数据的动态扩缩容。



扫描下方二维码添加「好未来技术」微信官方账号
进入好未来技术官方交流群与作者实时互动~
(若扫码无效,可通过微信号TAL-111111直接添加)
- 也许你还想看 -
Web前端安全深度解读
掰开揉碎系列|详解Redis的Sorted-Set底层
Cocos多边形点击和解数独

我知道你“在看”哟~




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存