代码编织梦想

头图.jpg

作者 | 柳密 阿里巴巴阿里云智能
本文整理自《Serverless 技术公开课》

导读:本节课主要介绍如何在 Serverless Kubernetes 集群中低成本运行 Spark 数据计算。首先简单介绍下阿里云 Serverless Kubernetes 和 弹性容器实例 ECI 这两款产品;然后介绍 Spark on Kubernetes;最后进行实际演示。

产品介绍

阿里云弹性容器实例 ECI

ECI 提供安全的 Serverless 容器运行服务。无需管理底层服务器,只需要提供打包好的 Docker 镜像,即可运行容器,并仅为容器实际运行消耗的资源付费。

1.PNG

阿里云容器服务产品族

2.PNG

不论是托管版的 Kubernetes(ACK)还是 Serverless 版 Kubernetes(ASK),都可以使用 ECI 作为容器资源层,其背后的实现就是借助虚拟节点技术,通过一个叫做 Virtual Node 的虚拟节点对接 ECI。

3.PNG

Kubernetes + ECI

有了 Virtual Kubelet,标准的 Kubernetes 集群就可以将 ECS 和虚拟节点混部,将 Virtual Node 作为应对突发流量的弹性资源池。

4.PNG

ASK(Serverless Kubernetes)+ ECI

Serverless 集群中没有任何 ECS worker 节点,也无需预留、规划资源,只有一个 Virtual Node,所有的 Pod 的创建都是在 Virtual Node 上,即基于 ECI 实例。

5.PNG

Serverless Kubernetes 是以容器和 Kubernetes 为基础的 Serverless 服务,它提供了一种简单易用、极致弹性、最优成本和按需付费的 Kubernetes 容器服务,其中无需节点管理和运维,无需容量规划,让用户更关注应用而非基础设施的管理。

Spark on Kubernetes

Spark 自 2.3.0 开始试验性支持 Standalone、on YARN 以及 on Mesos 之外的新的部署方式:Running Spark on Kubernetes,如今支持已经非常成熟。

Kubernetes 的优势

6.PNG

Spark on kubernetes 相比于 on Yarn 等传统部署方式的优势:

1、统一的资源管理。不论是什么类型的作业都可以在一个统一的 Kubernetes 集群中运行,不再需要单独为大数据作业维护一个独立的 YARN 集群。
2、传统的将计算和存储混合部署,常常会为了扩存储而带来额外的计算扩容,这其实就是一种浪费;同理,只为了提升计算能力,也会带来一段时期的存储浪费。Kubernetes 直接跳出了存储限制,将离线计算的计算和存储分离,可以更好地应对单方面的不足。
3、弹性的集群基础设施。
4、轻松实现复杂的分布式应用的资源隔离和限制,从 YRAN 复杂的队列管理和队列分配中解脱。
5、容器化的优势。每个应用都可以通过 Docker 镜像打包自己的依赖,运行在独立的环境,甚至包括 Spark 的版本,所有的应用之间都是完全隔离的。
6、大数据上云。目前大数据应用上云常见的方式有两种:1)用 ECS 自建 YARN(不限于 YARN)集群;2)购买 EMR 服务,目前所有云厂商都有这类 PaaS,如今多了一个选择——Kubernetes。

Spark 调度

7.PNG

图中橙色部分是原生的 Spark 应用调度流程,而 Spark on Kubernetes 对此做了一定的扩展(黄色部分),实现了一个 KubernetesClusterManager。其中 **KubernetesClusterSchedulerBackend 扩展了原生的CoarseGrainedSchedulerBackend,**新增了 **ExecutorPodsLifecycleManager、ExecutorPodsAllocator 和KubernetesClient **等组件,实现了将标准的 Spark Driver 进程转换成 Kubernetes 的 Pod 进行管理。

Spark submit

在 Spark Operator 出现之前,在 Kubernetes 集群提交 Spark 作业只能通过 Spark submit 的方式。创建好 Kubernetes 集群,在本地即可提交作业。

作业启动的基本流程:

1、Spark 先在 K8s 集群中创建 Spark Driver(pod)。
2、Driver 起来后,调用 K8s API 创建 Executors(pods),Executors 才是执行作业的载体。
3、作业计算结束,Executor Pods 会被自动回收,Driver Pod 处于 Completed 状态(终态)。可以供用户查看日志等。
4、Driver Pod 只能被用户手动清理,或者被 K8s GC 回收。

直接通过这种 Spark submit 的方式,参数非常不好维护,而且不够直观,尤其是当自定义参数增加的时候;此外,没有 Spark Application 的概念了,都是零散的 Kubernetes Pod 和 Service 这些基本的单元,当应用增多时,维护成本提高,缺少统一管理的机制。

Spark Operator

Spark Operator 就是为了解决在 Kubernetes 集群部署并维护 Spark 应用而开发的,Spark Operator 是经典的 CRD + Controller,即 Kubernetes Operator 的实现。

9.PNG

下图为 SparkApplication 状态机:

10.PNG

Serverless Kubernetes + ECI

那么,如果在 Serverless Kubernetes 集群中运行 Spark,其实际上是对原生 Spark 的进一步精简。

11.PNG

存储选择

12.PNG

对于批量处理的数据源,由于集群不是基于 HDFS 的,所以数据源会有不同,需要计算与存储分离,Kubernetes 集群只负责提供计算资源。

  • 数据源的存储可以采用阿里云对象存储 OSS、阿里云分布式存储 HDFS 等。
  • 计算的临时数据、Shuffle 数据可以采用 ECI 提供的免费的 40GB 的系统盘存储空间,还可以自定义挂载阿里云数据盘、以及 CPFS/NAS 文件系统等,都拥有非常不错的性能。

实操演示

本次实操分别展示 TPC-DS 和 WordCount 两个应用,点击即可观看具体操作演示过程

Serverless 公众号,发布 Serverless 技术最新资讯,汇集 Serverless 技术最全内容,关注 Serverless 趋势,更关注你落地实践中的遇到的困惑和问题。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/weixin_42477427/article/details/111042321

并发编程的艺术笔记-并发编程的挑战-爱代码爱编程

并发编程的目的是为了让程序运行的更快,但是,并不是启用更多的线程就能让程序最大程度的并发执行,进行并发编程时,会面临很多挑战,比如上下文呢切换的问题 ,死锁的问题,受限于硬件和软件的资源限制的问题。 上下文切换 CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片之后会切换到下一个任务。切换前会保存上一个任务的状态,以便下一次切换回

基于Servlet实现简单页面登录功能-爱代码爱编程

Servlet基础: Servlet是运行在服务器上,处理客户发送的请求,并做出相应的响应的Java程序。Servlet 的核心是javax.servlet.Servlet接口,所有的Servlet 必须实现这个接口。自定义的Servlet 大都是从GenericServlet 和HttpServlet 类进行扩展来实现。Servlet生命周期: Se

开放平台接口签名认证的实践-爱代码爱编程

当系统接口最为开放接口提供给第三方调用时,接口的安全问题必须考虑,请求身份是否合法?请求是否被篡改?请求是否唯一? 请求身份 为开发者分配AccessKey(开发者标识,确保唯一)和SecretKey(秘钥,用于接口加密),在项目中AccessKey和SecretKey可以做类似用户管理的完备管理机制,成为系统功能的一部分。 防止篡改 为防止请求在

javamelody的SpringBoot的Starter与Hikari连接池出现的问题-爱代码爱编程

javamelody的SpringBoot的Starter与Hikari连接池出现的问题 org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web

SpringBoot部署项目到Linux上传文件路径问题-爱代码爱编程

SpringBoot部署项目到Linux上传文件路径问题 使用项目相对路径上传到话会上传到linux服务器到/tmp 临时文件目录中,但是问题是还会报异常 Caused by: java.io.FileNotFoundException: /tmp/tomcat.8223985333111777969.80/work/Tomcat/localho

删除排序数组中的重复项----java-爱代码爱编程

题目: 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需

无服务计算应用场景探讨及 FaaS 应用实战-爱代码爱编程

作者 | 宋文龙(闻可)  阿里云全球技术服务部高级交付专家 来源 | Serverless 公众号 什么是无服务计算 无服务器计算(Serverless Computing)在构建和运行应用时无需管理服务器等基础设施。它描述了一个细粒度的部署模型,在该模型中,应用被拆解为一个或多个细颗粒度的函数,在云端托管环境中被触发运行,然后根据需要执行、扩展

Serverless 应用如何管理日志 & 持久化数据-爱代码爱编程

作者 | 竞霄 阿里巴巴开发工程师本文整理自《Serverless 技术公开课》* 导读:本节课程有三部分内容,分别介绍在 SAE 上查看应用的实时日志,文件日志以及通过 NAS 进行应用数据的持久化存储。 实时日志 首先,SAE 支持查看应用实例分组下各个 Pod 的实时日志。当应用出现异常情况时,可以通过查看 Pod 的实时日志

为什么下一个十年的主战场在 Serverless?-爱代码爱编程

作者 | 不瞋  阿里云 Serverless 负责人 来源 | Serverless 公众号 “唯有超越,才能让我们走下去。” 这是不瞋在阿里的第十年。从 2010 年加入阿里云,不瞋参与了阿里云飞天分布式系统的研发,历任批量计算的架构师、表格存储(NoSQL)研发经理,深度参与了阿里云系统研发和产品迭代的全过程。2016 年不瞋成为阿里云函数计

开发函数计算的正确姿势——网页截图服务-爱代码爱编程

前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息参考。 Fun: Fun

Serverless 如何落地?揭秘阿里核心业务大规模落地实现-爱代码爱编程

来源|阿里巴巴云原生公众号 2020 年,新冠肺炎疫情催化数字化生活方式渐成常态。在企业积极进行数字化转型、全面提升效率的今天,几乎无人否认背负“降本增效”使命诞生的 Serverless 即将成为云时代新的计算范式。 Serverless 将开发者从繁重的手动资源管理和性能优化中解放出来,正在引发云计算生产力的新变革。 然而,Serverles