基于 K8S 的 Spark 资源弹性实践
Posted 过往记忆大数据
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于 K8S 的 Spark 资源弹性实践相关的知识,希望对你有一定的参考价值。
1. 背景介绍
大数据时代早期,Apache Hadoop是构建具有海量存储能力数据仓库的首选方案,许多企业用户采用在云上购买ECS,自建Hadoop集群来存储和处理数据。Apache Spark作为一个内存计算框架,具有流处理、批处理,图计算,机器学习,SQL查询等多种能力,社区活跃度高,并且Spark天然支持Hadoop数据源,可以完美的融入Hadoop生态,提供高效的计算能力。Hadoop+Spark成为大数据领域的明星,被广泛用于离线大数据的挖掘。
云上的Hadoop集群通常是以ECS加云盘(或本地盘)配合一系列开源组件组成。随着业务的增长,对计算能力的需求不断地提升,尤其是在业务高峰期,数据大量涌入,为保证服务的稳定性和及时性,需要及时的增加节点来满足业务需求。业务低峰期时,希望能及时的回收多余的计算资源,避免资源的浪费。这就要求Hadoop集群具有一定的弹性能力,能根据业务量及时地扩(缩)容相应的计算资源。弹性能力是云计算的趋势,可以给用户带来更低成本的计算。但是如何快捷稳定地给已有的计算集群增加弹性是一个让用户头痛的问题。
2. 传统弹性方案的问题
由于历史原因,用户的很多数据和业务放在自建Hadoop集群之上。随着业务发展,或者业务高峰期到来,对集群计算力需求增加,通常用户会采取扩容Hadoop集群节点,以增加可用计算资源池。虽然扩容机器可以一定程度的满足计算力的需求,但是会遇到以下的几个痛点。
•扩容慢: 通常一个比较大的集群扩容,为了避免对已有线上业务的影响,需要选择在业务低峰期扩容,且扩容时,由于需要在新的节点上部署各个组件,时间短则十几分钟,多则数小时,很难应对业务的变化。•缩容难: 由于业务高峰期只是一段时间,我们真正需要额外计算资源的时间也就只有一段时间,或者多出来的业务并不是每时每刻的都在执行,而是按照一定的时间间隔去执行。如果不及时缩容,就造成了计算的不饱和,带了对计算资源的浪费,增加了企业的成本开销。而扩容出来的节点,由于已经部署上了许多组件,缩容前需要预先退出这些组件,步骤繁琐,容易出错。•弹不出: 用户进行扩容时,按照ECS粒度,买一批ECS节点加入到现有计算集群的资源池。购买的ECS规格往往较大,受云资源碎片化的影响,有时很难满足用户对一批大规格ECS资源的请求,导致计算资源弹不出,无法完成对集群的扩容。
3. DLA Spark快速弹性方案
DLA团队将Serverless、云原生、Spark技术优势深度整合到一起,提供Serverless Spark产品,可以无缝连接用户Hadoop集群,快捷稳定地为传统Hadoop集群增加弹性算力。下面我们将介绍DLA Serverless Spark是如何解决用户上述痛点问题的。
免运维的虚拟计算集群
上图是传统的Hadoop集群中的Spark与DLASpark的架构对比。图中左边部分是传统Spark集群,由多个ECS组成,集群内部拥有一套完整的Spark管控,计算进程和管控进程部署在各个ECS上,每个集群的计算资源池相对固定,如果需要更多的计算资源则需要扩容更多的计算节点,需要缩容则需要关闭对应ECS上的服务,然后释放ECS资源。
图中右边是DLA Spark,相对于传统的集群模式,DLA Spark抽象出一个虚拟集群的概念,虚拟集群并没有实际的计算资源,它只是承载用户对作业进行控制的一些配置,包括计算资源的配置、作业通用参数的配置等。创建虚拟集群不需要任何费用,用户简单地选择虚拟集群内存和CPU的上限后,即可快速的创建一个虚拟集群,并往虚拟集群提交作业。DLA Spark是多租户化的,每个用户可拥有多个自己的虚拟集群,无需用户进行运维。
计算进程级别的弹性粒度
DLA Spark基于Aliyun Kubernetes云原生技术深度定制, 实现了计算进程级别的弹性粒度,可更高效地应对云资源碎片化问题。用户通过作业指定的资源规格弹性拉起计算进程,计算进程运行安全容器中。安全容器是基于阿里云的底座ECS&ACK&ECI,与阿里云IAAS资源大池打通,本Region跨可用区资源调度,保障计算资源的供给, 支持1分钟内弹300个安全容器。
快速扩缩容
由于DLASpark虚拟集群化的设计,计算进程在作业启动过程中动态拉起,用户可以很方便地对虚拟集群的规格进行扩缩容,只需要在控制台上进行资源配置即可。值得注意的是,虚拟集群中的计算进程使用完毕后就会自动释放,无需用户关心计算资源的生命周期。虚拟集群是按量付费,即只有作业真正的提交到虚拟集群运行之后,才开始按照资源使用时间计费,作业运行完毕即停止收费,不存在对计算资源的浪费。
无缝打通用户Hadoop集群
如上图所示,DLA Spark可以通过挂载用户VPC空间下的弹性网卡,无缝对接用户自建Hadoop集群。DLA Spark的Driver和Executor运行在安全容器中,该容器实例动态挂载用户VPC空间下的虚拟网卡,来访问用户VPC下的服务(如 HBase,Hive,HDFS等)。挂载了弹性网卡的容器实例就如同运行在用户自建Hadoop集群中的ECS实例一样,网络带宽同样是VPC内网带宽。虚拟网卡的生命周期跟Spark进程的生命周期一致,作业结束后,所有网卡也会相应释放。
值得一提的是,弹性网卡,是一种免费的技术,用户使用弹性网卡访问Hadoop集群数据不需要花费额外的费用。打通用户Hadoop集群配置简单,用户运行作业时,如需为Serverless Spark计算进程挂载虚拟网卡,只需要在作业配置中配置上属于该VPC的安全组和虚拟交换机即可。更方便地,如果用户某个ECS本来就可以访问目标数据,那么让DLA Spark配置该ECS所在的安全组和虚拟交换机即可。
4. DLA Spark的性价比优势
性能相当,资源利用率高
如上图,我们通过运行典型的ETL场景,1TB数据TeraSort,来开箱测试社区版Spark和DLA Serverless Spark的性能,需要说明的是,本测试中DLA Serverless Spark通过弹性网卡直接读写用户Hadoop集群的数据,社区版Spark部署在与Hadoop集群相同的ECS上。从上图中可以看到,两者性能基本持平。
由于DLASpark是按照计算进程拉起的,运行在安全容器中,用户只需要关心作业进程的规格和个数即可,拉起的资源全部用于DLA Spark的运行。而自建Hadoop集群由于是ECS级别的,需要预留一定资源用于运行NodeManager等组件,会存在一定的资源冗余。我们可以看到自建Hadoop集群要满足Driver 需要4核16G,20个2核8G的Executor的配置需要购买6台8核32G的ECS。因此相比之下DLA Spark的资源利用率更高。
快速弹性,节省用户成本
一般而言,用户的业务量是随着时间变化的,当自建Hadoop集群计算资源不足时,用户可以提交作业到虚拟集群中,快速拉起DLASpark进行计算,当业务低谷时,虚拟机群停止接收作业,不收取任何费用。我们还是以上述TeraSort为例,用户自建集群包月,DLA Spark按量付费的情况。DLA Saprk比起自建Hadoop集群,一天运行十次TeraSort时,成本可节约72%,一天运行三十次TeraSort时,成本可节约16%。用户可以将自建Hadoop集群与DLA Spark混合使用,在性能不降低的情况下做到对计算资源的快速弹性伸缩,降低用户计算成本。
5. 总结与展望
DLA团队将Serverless、云原生、Spark技术优势深度整合到一起,打造计算进程级别弹性的免运维Spark计算服务,可以很好地解决自建Hadoop集群计算资源扩(缩)容难,计算资源利用率低的问题,并且可以打通用户VPC下的各类存储引擎,提供极致的弹性计算体验,帮助用户降低计算成本。
注意:阿里云DLA Spark专家组特地建立了专门的钉钉群,帮助大家答疑解惑,用钉钉扫描左侧二维码即可加入。
以上是关于基于 K8S 的 Spark 资源弹性实践的主要内容,如果未能解决你的问题,请参考以下文章