在kubernetes上运行apache spark:最佳实践和陷阱

本文涉及的产品
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 阿里云高级技术专家范振为大家带来在kubernetes上运行apache spark的介绍。内容包括Data Mechanic平台介绍,Spark on k8s,以及EMR团队云原生的思考和实践。以下由Spark+AI Summit中文精华版峰会的精彩内容整理。

一、Data Mechanics平台介绍

这块是data mechanics平台的一个介绍。首先,它是一个serverless的平台,即一个全托管的平台,用户不用去关心自己的机器。所有的应用的启动和扩容都是在这种秒级的。然后,对于这种本地的开发转到这种线上的部署,它是一种无缝的转换。然后,它还能提供这种配置自动的spark的一些参数调优,整个这条pipeline都会做得非常的快,已经非常地稳定。

image.png

然后他们相当于是把整个的平台部署在用户的账号里边的K8S集群。这样的话,对整个的安全是一个非常大的保证。然后数据权限,包括运行权限,都在统一的账号里面。

image.png

二、Spark on k8s

(一)核心概念

首先,k8s和spark的结合是出现在spark 2.3版本以后的事情,在此之前有几种方式。第一种就是Standalone,大家使用的并不是非常的多。第二种是Apache mesos,在国外用的比较多,但是市场规模也在逐渐缩小。第三种是Yarn,我们现在绝大多数的企业都是跑在Yarn的集群里面了。第四种是Kubernetes,现在大家也逐渐的把spark跑在k8s上面。

image.png

Spark on k8s的架构如下图所示:
image.png

提交应用的方式有两种。一种是Spark submit,另一种是Spark-on-k8s operator。它们各自的特点如下图所示:
image.png

然后我们再对比一下Yarn和k8s的依赖的管理。这块是区分点比较大的一个地方。Yarn提供一个全局的spark版本,包括python的版本,全局的包的依赖,缺少环境隔离。而k8s是完全的环境隔离,每一个应用可以跑在完全不同的环境、版本等。Yarn的包管理方案是上传依赖包到HDFS。K8s的包管理方案是自己管理镜像仓库,将依赖包打入image中,支持包依赖管理,将包上传到 OSS/HDFS,区分不同级别任务,混合使用以上两种模式。

image.png

(二)配置和性能

然后我们说一下配置spark executors的小坑。举个例子,假设k8s node为16G-RAM,4-core的ECS,下面的配置会一个executor都申请不到!如下图所示。

image.png

原因是什么,就是说Spark pod只能按照node资源的一定比例来申请资源,而spark.executor.cores=4占用了node cores全部资源。如下图所示,假设我们计算得到的可用资源是85%,那么我们应该这样配置资源,spark.kubernetes.executor.request.cores=3400m。

image.png

然后这块是一个比较重要的特点,就是动态资源。动态资源的完整支持目前做不到。比如说,Kill一个pod,shuffle file会丢失, 会带来重算。

image.png

这一块是Cluster autoscaling和dynamic allocation。上文中,我们看到PPT的某一页,它有一个实线框,还有一个虚线框。实际上说的是,k8s cluster autoscaler:当pod处于pending状态不能被分配资源时,扩展node节点。然后, Autoscaling和动态资源配合起来工作,就是说,当有资源时,executor会在10s内注册到driver。而当没有资源时,先通过autoscaling添加ECS资源,再申请executors。 大约在1min~2min内完成executor申请过程。

image.png

这个实际上也是更好的保证了我们运行时的弹性,还有一个我自己的理解,比较有意思的一个玩法,就是说更加省成本。Spot instance会使得成本降低75%,它是可以被抢占的一种资源方式,跑一些SLA不高、价格敏感的应用。它在架构上整体设计,使得成本最低。如果executor被kill,会recover。如果driver被kill,就会很危险。配置node selector和affinities来控制Driver调度在非抢占的node,executor调度在spot instance。

image.png

然后,下一个就是对象存储的IO问题。Sparkonk8s通常都是针对对象存储,rename,list,commit task/job会非常费时。如果没有S3A committers,Jindofs JobCommitter,应该设置 spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2。

image.png

还有Shuffle性能。 I/O性能是shuffle bound workload的关键点,spark2.x版本用docker file system。而Docker file system是非常慢的,需要用volume来代替。

image.png

(三)未来工作

未来的工作,我认为比较重要的就是shuffle的提升,中间数据的存储与计算分离。这块是一个比较大的工作。另外,还有Node decommission,支持上传python依赖文件等等。

image.png

我们选择k8s的优缺点,如下图所示:
image.png

部署spark on k8s的具体步骤,如下图所示:
image.png

三、EMR团队云原生的思考和实践

(一)整体架构

这块是我们的一个整体架构,如下图所示:
image.png

(二)动态资源&shuffle提升

Shuffle service解决核心问题:
▪ 解决动态资源问题
▪ 解决挂载云盘贵,事前不确定大小的痛点
▪ 解决NAS作为中心存储的扩展性以及性能问题
▪ 避免task由于fetch失败重新计算的问题,提升中大作业的稳定性
▪ 通过Tiered存储提升作业性能

(三)EMR Spark云原生规划

EMR产品体系,创建EMR集群类型为ON ACK:
▪ JindoSpark镜像
▪ JindoFSService/JindoFSSDK提升访问OSS数据湖能力
▪ JindoJobCommitter增强提交OSS作业能力
▪ JindoShuffleService&动态资源能力增强
▪ ACK集群打通EMR原有集群,可以互访老集群表和HDFS数据
▪ Operator增强,Dependency管理,提供一站式管控命令
▪ 云原生日志、监控一站式平台


关键词:kubernetes,apache spark,云原生,data mechanics,spark on k8s

获取更多 Spark+AI SUMMIT 精彩演讲视频回放,立刻点击前往:
>>SPARK + AI SUMMIT 2020 中文精华版线上峰会 7月4日第一场<<
>>SPARK + AI SUMMIT 2020 中文精华版线上峰会 7月5日第二场<<

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
数据库连接 PHP Apache
PHP在Apache中如何运行?
PHP在Apache中如何运行?
60 5
|
3月前
|
分布式计算 大数据 Java
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
52 1
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
|
3月前
|
分布式计算 大数据 Apache
利用.NET进行大数据处理:Apache Spark与.NET for Apache Spark
【10月更文挑战第15天】随着大数据成为企业决策和技术创新的关键驱动力,Apache Spark作为高效的大数据处理引擎,广受青睐。然而,.NET开发者面临使用Spark的门槛。本文介绍.NET for Apache Spark,展示如何通过C#和F#等.NET语言,结合Spark的强大功能进行大数据处理,简化开发流程并提升效率。示例代码演示了读取CSV文件及统计分析的基本操作,突显了.NET for Apache Spark的易用性和强大功能。
77 1
|
6月前
|
SQL 弹性计算 资源调度
云服务器 ECS产品使用问题之bin/spark-sql --master yarn如何进行集群模式运行
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
6月前
|
分布式计算 大数据 Spark
Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享
《Spark大数据处理:技术、应用与性能优化》深入浅出介绍Spark核心,涵盖部署、实战与性能调优,适合初学者。作者基于微软和IBM经验,解析Spark工作机制,探讨BDAS生态,提供实践案例,助力快速掌握。书中亦讨论性能优化策略。[PDF下载链接](https://zhangfeidezhu.com/?p=347)。![Spark Web UI](https://img-blog.csdnimg.cn/direct/16aaadbb4e13410f8cb2727c3786cc9e.png#pic_center)
175 1
Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享
|
5月前
|
分布式计算 Hadoop 大数据
大数据处理框架在零售业的应用:Apache Hadoop与Apache Spark
【8月更文挑战第20天】Apache Hadoop和Apache Spark为处理海量零售户数据提供了强大的支持
91 0
|
5月前
|
分布式计算 Serverless 数据处理
EMR Serverless Spark 实践教程 | 通过 Apache Airflow 使用 Livy Operator 提交任务
Apache Airflow 是一个强大的工作流程自动化和调度工具,它允许开发者编排、计划和监控数据管道的执行。EMR Serverless Spark 为处理大规模数据处理任务提供了一个无服务器计算环境。本文为您介绍如何通过 Apache Airflow 的 Livy Operator 实现自动化地向 EMR Serverless Spark 提交任务,以实现任务调度和执行的自动化,帮助您更有效地管理数据处理任务。
245 0
|
6月前
|
存储 分布式计算 运维
EMR Serverless Spark服务最佳实践测评
EMR Serverless Spark服务最佳实践测评
151 2
|
6月前
|
分布式计算 Apache Spark
|
7月前
|
分布式计算 大数据 数据处理
Apache Spark在大数据处理中的应用
Apache Spark是大数据处理的热门工具,由AMPLab开发并捐赠给Apache软件基金会。它以内存计算和优化的执行引擎著称,提供比Hadoop更快的处理速度,支持批处理、交互式查询、流处理和机器学习。Spark架构包括Driver、Master、Worker Node和Executor,核心组件有RDD、DataFrame、Dataset、Spark SQL、Spark Streaming、MLlib和GraphX。文章通过代码示例展示了Spark在批处理、交互式查询和实时数据处理中的应用,并讨论了其优势(高性能、易用性、通用性和集成性)和挑战。【6月更文挑战第11天】
200 6

热门文章

最新文章