摘要:本篇文章将会从Spark on Kubernetes 发展历程以及工作原理,以及介绍一下Spark with Volcano,Volcano如何能够帮助 Spark运行地更高效。

Spark on Kubernetes

我们来看Spark on Kubernetes的背景。其实Spark在从2.3这个版本开始之后,就已经支持了Kubernetes native,可以让Spark的用户可以把作业运行在Kubernetes上,用Kubernetes去管理资源层。在2.4版本里增加了client mode和Python语言的支持。而在今年的发布的Spark 3.0里面,对Spark on Kubernetes这一方面也增加了很多重要的特性,增加动态资源分配、远端shuffle service以及 Kerberos 支持等。

Spark on Kubernetes的优势:

1)弹性扩缩容

2)资源利用率

3)统一技术栈

4)细粒度的资源分配

5)日志和监控

Spark submit 工作原理

Spark对于Kubernetes的支持,最早的一种工作方式是通过 Spark官方的spark submit方式去支持,Clinet通过Spark submit提交作业,然后spark driver会调用apiserver的一些api去申请创建 executor,executor都起来之后,就可以执行真正的计算任务,之后会做日志备份。

这种方式有一个优势是,传统的 Spark用户切换到这种方式之后用户体验改变大。但也存在缺少作业周期管理的缺陷。

Spark-operator 工作原理

第二种Spark on Kubernetes的使用方式就是operator。operator是更Kubernetes的方式,你看他的整个作业提交,先是yaml文件通过kubectl提交作业,在这里面它有自己的crd,即SparkApplication,Object。创建了SparkApplication之后, Controller可以watch到这些资源的创建,后边流程其实是复用的第一种工作模式,但是通过这种模式,做的更完善的一些。

相对于第一种方式来讲,这里的Controller可以维护对象生命周期,可以watch spark driver的状态,并更新application的状态,是一个更完善的解决方案。

这两种不同的使用方式使用是各有优势,不少的公司两种方式都有使用。这一块在官网也有介绍。

Spark with Volcano

Volcano对于上面提到两种工作方式都进行了集成和支持。这个链接是我们维护的 Spark开源代码仓库:https://github.com/huawei-cloudnative/spark/tree/spark-2.4-volcano-0.1

在这里面Volcano做的事情其实也很简单,你看整个提交的过程,首先是通过spark submit提交作业,提交作业时会创建一个podgroup,podgroup包含了用户配置的一些调度相关的信息。它的yaml文件大家可以看到,页面右边这个部分,增加了driver和executor两个角色。

Volcano 队列

队列其实我们在第一堂和第二堂课里面也讲到了。因为Kubernetes里面没有队列的支持,所以它在多个用户或多个部门在共享一个机器的时候资源没办法做共享。但不管在HPC还是大数据领域里,通过队列进行资源共享都是基本的需求。

在通过队列做资源共享时,我们提供了多种机制。图最上面的这种,这里面我们创建两个队列,通过这两个队列去共享整个集群的资源,一个队列给他分40%的咨询资源,另一个给他分60%的资源,这样的话就可以把这两个不同的队列映射到不同的部门或者是不同的项目各自使用一个队列。这在一队列里,资源不用的时候,可以给另外一个队列里面的作业去使用。下面讲的是两个不同的namespace之间的资源平衡。Kubernetes里当两个不同的应用系统的用户都去提交作业时,提交作业越多的用户,他获得的集群的资源会越多,所以在这里面基于namespace,我们进行公平的调度,保证namespace之间可以按照权重分享集群的资源。

Volcano: Pod delay creation

之前介绍这个场景的时候,有些同学反映没有太听懂,所以我加了几页PPT扩展一下。

举个例子,我们在做性能测试的时候,提交16个并发的作业,对于每个作业来讲,它的规格是1 driver+4 executor,整个集群总共有4台机器16个核,这样的一个情况。

同时提交16个spark job的时候,driver pod的创建和executor pod的创建之间有一个时间差。因为有这个时间差,当16个spark的job跑起来之后把整个机群全部占满了,就会导致同时提交并发量特别大作业的时候,整个集群卡死。

为了解决这种情况,我们做了这样的事情。

让一个节点专门去跑driver pod。其他三个节点专门去跑executor pod,防止driver pod占用更多的资源,就可以解决被卡死的问题。

但也有不好的地方,这个例子里节点是1:3的关系。在真实的场景下,用户的作业的规格都是动态的, 而这种分配是通过静态的方式去划分,没办法跟真实的业务场景里动态的比例保持一致,总是会存在一些资源碎片,会有资源的浪费。

因此,我们增加了Pod delay creation的功能,增加这个功能之后不需要对node去做静态的划分,整个还是4个节点,在16个作业提上来的时候,对于每个作业增加了podgroup的概念。Volcano的调度器会根据提上来作业的podgroup进行资源规划。

这样就不会让过多的作业会提交上来。不但可以把4个节点里面所有的资源全部用完,而且没有任何的浪费,在高并发的场景下控制pod创建的节奏。它的使用也非常简单,可以按照你的需求配资源量,解决高并发的场景下运行卡死或者运营效率不高的情况。

Volcano: Spark external shuffle service

我们知道原来的Spark已经很完善了,有很多特别好用的功能,Volcano保证了迁移到Kubernetes上之后没有大的功能缺失:

1)ESS以daemonset的方式部署在每个节点

2)Shuffle本地写Shuffle数据,本地、远端读shuffle数据

3)支持动态资源分配

点击关注,第一时间了解华为云新鲜技术~

大数据场景下Volcano高效调度能力实践的更多相关文章

  1. 看大数据时代下的IT架构(1)业界消息队列对比

    一.MQ(Message Queue) 即 消息队列,一般用于应用系统解耦.消息异步分发,能够提高系统吞吐量.MQ的产品有很多,有开源的,也有闭源,比如ZeroMQ.RabbitMQ. ActiveM ...

  2. c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习

    c#中@标志的作用   参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...

  3. Pulsar 联合 TiDB 推出大数据场景数据应用分析解决方案

    方案概述 大数据时代,各类应用对消息解决方案的要求不仅仅是数据的流动,而是要在持续增长的服务和应用中传输海量数据,进行智能的处理和分析,帮助业务做出更加精准的决策. Pulsar 与 TiDB 联合解 ...

  4. R You Ready?——大数据时代下优雅、卓越的统计分析及绘图环境

    作者按:本文根据去年11月份CSDN举办的“大数据技术大会”演讲材料整理,最初发表于2012年2月期<程序员>杂志. 0  R 的安装

  5. 柯南君:看大数据时代下的IT架构(5)消息队列之RabbitMQ--案例(Work Queues起航)

    二.Work Queues(using the Java Client) 走起   在第上一个教程中我们写程序从一个命名队列发送和接收消息.在这一次我们将创建一个工作队列,将用于分发耗时的任务在多个工 ...

  6. [转帖]etcd 在超大规模数据场景下的性能优化

    etcd 在超大规模数据场景下的性能优化   阿里系统软件技术 2019-05-27 09:13:17 本文共5419个字,预计阅读需要14分钟. http://www.itpub.net/2019/ ...

  7. 大数据时代下EDM邮件营销的变革

    根据研究,今年的EDM邮件营销的邮件发送量比去年增长了63%,许多方法可以为你收集用户数据,这些数据可以帮助企业改善自己在营销中的精准度,相关性和执行力. 最近的一项研究表明,中国800强企业当中超过 ...

  8. etcd 在超大规模数据场景下的性能优化

    作者 | 阿里云智能事业部高级开发工程师 陈星宇(宇慕) 概述 etcd是一个开源的分布式的kv存储系统, 最近刚被cncf列为沙箱孵化项目.etcd的应用场景很广,很多地方都用到了它,例如kuber ...

  9. 柯南君:看大数据时代下的IT架构(4)消息队列之RabbitMQ--案例(Helloword起航)

    柯南君:看大数据时代下的IT架构(4)消息队列之RabbitMQ--案例(Helloword起航) 二.起航 本章节,柯南君将从几个层面,用官网例子讲解一下RabbitMQ的实操经典程序案例,让大家重 ...

  10. 柯南君:看大数据时代下的IT架构(3)消息队列之RabbitMQ-安装、配置与监控

    柯南君:看大数据时代下的IT架构(3)消息队列之RabbitMQ-安装.配置与监控 一.安装 1.安装Erlang 1)系统编译环境(这里采用linux/unix 环境) ① 安装环境 虚拟机:VMw ...

随机推荐

  1. BGP路由协议学习一

    转载请注明出处: 1.BGP的特点: BGP使用TCP作为其传输层协议(端口号为179),使用触发式路由更新,而不是周期性路由更新. BGP能够承载大批量的路由信息,能够支撑大规模网络. BGP提供了 ...

  2. 虹科案例 | 虹科Domo商业智能,助力保险公司逃离繁杂数据池!

    金融行业的发展充满着不确定性,一个具备强大承保能力和精算专业知识的资金池,对于身处该领域的公司和个人都是十分必要的. 在全国城市联盟(NLC)的协助下成立的NCL Mutual会员制互助保险公司,为各 ...

  3. Velocity之Hello World(tomcat下配置Velocity)

    本文主要参考:http://hi.baidu.com/dalianjingying/item/1fb3a98ad64dcac299255f72 http://wangbaoaiboy.blog.163 ...

  4. 使用Github Copilot生成单元测试并执行

    上一篇文章我们介绍了 使用Github Copilot完成代码编写 本文我们继续使用Github Copilot在已有代码的基础上生成代码测试并执行. 一.先说一下代码的背景 需要上需要提供一个度量衡 ...

  5. UIPath动态操作控制

    如果放弃太早,你永远都不知道自己会错过什么. 一.浏览器 打开浏览器:OpenBrowser: 关闭浏览器:Close Tab.Close Application.Kill Process: 二. 鼠 ...

  6. H.264 和 H.265对比

    前言 H.264标准正式发布于2003年3月,距今已经20多年了,但它仍然是当下最流行的视频编解码标准. H.265正式发布于2013年4月.虽然H.265标准是围绕着H.264进行制定的,也保留了原 ...

  7. 31. 干货系列从零用Rust编写正反向代理,HTTP限流的实现(limit_req)

    wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现websocket代 ...

  8. Visual Studio安装教程

    一.官网下载 地址:下载 Visual Studio Tools - 免费安装 Windows.Mac.Linux (microsoft.com) 二.安装 1.双击开始安装 2.等待一段时间,打开配 ...

  9. 国内 AI 成图第一案!你来你会怎么判?

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...

  10. 深度掌握TypeScript中的重载【函数重载、方法重载】

    深度掌握TypeScript中的重载[函数重载.方法重载] 1. 函数重载,方法重载的重要性 著名前端流行框架底层都用到函数重载,例如:Vue3 底层源码就多处使用到带泛型的函数重载.很多前端面试更是 ...