- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 视频嵌入链接 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
Spark on Kubernetes在社区的现状与展望
姜逸坤-华为高级软件工程师/鲲鹏开源软件生态使能负责人
王雷博-华为云容器批量计算架构师/Volcano Maintainer
展开查看详情
1 .
2 .Spark on K8S 社区现状与展望 华为计算 姜逸坤 华为云 王雷博
3 .自我介绍 姜逸坤 王雷博 华为计算 华为云 鲲鹏开源软件生态使能负责人 华为云容器批量计算架构师 Apache Spark Contributor Volcano开源社区技术负责人 OpenStack Committer
4 .目录 1. Spark on K8S的现状与发展 2. Spark on K8S的社区新特性 3. K8S在大数据场景的改进
5 .目录 1. Spark on K8S的现状与发展 2. Spark on K8S的社区新特性 3. K8S在大数据场景的改进
6 .社区贡献趋势 Spark K8S Spark YARN Spark MESOS 2016-2021年 Apache Spark 资源管理领域代码提交趋势 [1] 2016-2021年 Apache Spark 资源管理领域的搜索趋势 [2] 代码提交在一定程度反映了Spark社区技术趋势和热度 Google Trend在一定程度反映了用户关注度、落地程度。 - Kubernetes的趋势和热度在2020年超越Yarn。 - Spark K8S的搜索量逐渐上升,而Yarn则在下降。 - Yarn、MESOS的贡献逐渐趋于平缓。 [1] 数据来自于Spark合入Commits,通过Git过滤标题包含[YARN][K8S][MESOS]的个数统计。 [2] 数据来自于Google Trend。
7 .Spark on K8S的主要方案 Native Spark App in K8S Spark on Kubernetes Operator - Apache Spark官方实现 - Google 开源 - 提交方式:./spark-submit - 提交方式:kubectl apply *.yaml - 通过--conf配置Kubernetes的参数 - 通过yaml配置Kubernetes的参数 [1] spark/resource-managers/kubernetes [2] https://github.com/GoogleCloudPlatform/spark-on-k8s-operator
8 .Native Spark APP in K8S的时间线 开始孵化 投票通过 正式合入Spark 2.3 移除experiment Spark K8S GA 2016. 11 2017.08 2017.12 2020.08 2021.01 2016.11 提交了第一PR SPARK-18278 。 社区决定在apache-spark-on-k8s repo孵化。 2017.08 Spark on Kubernetes SPIP VOTE 通过。 2017.12 Spark on Kubernetes在Spark的代码正式合入Spark 2.3。 SPARK-18278 SPARK-22646 2020.08 官方文档中正式移除“实验”标记,并认可3.1 K8S GA:SPARK-32554 2021.01 Spark 3.1.1正式发布,Kubernetes正式GA SPARK-33005
9 .Dive in to Spark on K8S实现 spark-submit Kubernetes Kubernetes Driver Executor Driver Builder Executor Builder Seq( Seq( new BasicDriverFeatureStep(conf), new BasicExecutorFeatureStep(conf, secMgr, resourceProfile), new DriverKubernetesCredentialsFeatureStep(conf), new ExecutorKubernetesCredentialsFeatureStep(conf), new DriverServiceFeatureStep(conf), new MountSecretsFeatureStep(conf), new MountSecretsFeatureStep(conf), new EnvSecretsFeatureStep(conf), Feature Step new EnvSecretsFeatureStep(conf), new MountVolumesFeatureStep(conf), new MountVolumesFeatureStep(conf), new LocalDirsFeatureStep(conf) Pipeline new DriverCommandFeatureStep(conf), ) new HadoopConfDriverFeatureStep(conf), new KerberosConfDriverFeatureStep(conf), new PodTemplateConfigMapStep(conf), new LocalDirsFeatureStep(conf) ) 构建Driver Pod 构建Executor Pod/Statefulset
10 .目录 1. Spark on K8S的现状与发展 2. Spark on K8S的社区新特性与展望 3. K8S在大数据场景的改进
11 .最新的Apache Spark 3.2.0带来了什么? Kubernetes Enhancements •Upgrade Kubernetes client to 5.4.1 (SPARK-35660) •Support spark.kubernetes.executor.disableConfigMap (SPARK-34316) •Support remote template files (SPARK-34783) •Introducing a limit for pending PODs (SPARK-36052) 更易用 •Support shuffle data recovery on the reused PVCs (SPARK-35593) •Support early driver service clean-up during app termination (SPARK-35131) 异常场景的优化 •Add config for driver readiness timeout before executors start (SPARK-32975) 更具扩展性 •Support driver-owned on-demand PVC (SPARK-35182) •Maximum decommissioning time & allow decommissioning for excludes (SPARK-34104) •Support submit to k8s only with token (SPARK-33720) •Add a developer API for custom feature steps (SPARK-33261) https://docs.google.com/document/d/1Wvc7K2ep96HeGFOa4gsSUDhpCTj7U7p8EVRCj8dcjM0
12 .后续计划——多样性算力混部场景的改进 - 利用Spark Pod Label扩展帮助多样性算力平滑迁移 Driver Executor 同一资源池 Pod Pod 多架构场景 多样性算力弹性场景 算力混部场景 Driver 资源池A X86资源池 长期采购资源池 大数据资源池 Pod Executor Pod 资源池B ARM/混部 Node 竞价实例资源池 AI资源池临时资源 SPARK-36075: Support for specifying executor/driver node selector 充分利用混部、弹性能力,提高利用率、节省成本
13 .后续计划——批量调度能力的优化 Pod Group Queue - 更多的K8S原生资源支持: - 以Pod Group为单位调度 - 引入队列概念 StatefulSet/Job... - 最小资源(Pods/CPU/MEM) - 多租户 - 调度优先级 - 多队列优先级 SPARK-36057: Support volcano/alternative schedulers
14 .后续计划——批量调度能力的优化(Volcano实测) • 如果没有固定的driver节点,最多同时运行 26 条查询语句 • Spark-sql-perf (TP-DCS, master) • 104 queries concurrently • 由于Volcano提供了作业级的资源预留,总体性能提高了~30% • (8cpu, 64G, 1600SSD) * 4nodes • Kubernetes 1.13 • Volcano (min-res): 3.3 CPU, 12G Memory • Driver: 1cpu,4G; Executor: (1cpu,4G)*5 • Kubernetes: 1 node for drivers
15 .目录 1. Spark on K8S的现状与发展 2. Spark on K8S的社区新特性 3. K8S在大数据场景的改进
16 .HPC、大数据、AI 批量计算的发展历程和趋势 • LSF • PBS • SGE • Symphony • Globus • Slurm • SGE/UGE • HPC for AI isc/vhpc 199* 2005 2005 ~ 2008 2010 2013 2018 • Spark K8s, • Hadoop 1.0 • Hbase • YARN • Storm framework, • HDFS • Hive • NOSQL • Impala • Tez • Flink • Spark on k8s container 2006 2008 2010 2012 2013 2014 2017 • Tensorflow • Caffe2 • Kubeflow • Pytorch • kubeflow • kubecon 2015 2017 长期课题: 调度效率,资源利用率 业务类型: 单一作业平台 在离线作业混部 资源池: 多个独立资源池 统一的大资源池 技 术 栈 : 自建底层技术栈 拥抱云原生底座
17 .云原生批量计算面临的关键挑战 作业管理缺失 调度策略局限 • Pod级别调度,无法感知上层应用 • 不支持Gang-Scheduling、Fairshaing scheduling • 缺少作业概念、缺少完善的生命周期的管理 • 不支持多场景的Resource reservation,backfill • 缺少任务依赖、作业依赖支持 • 不支持CPU/IO topology based scheduling 领域计算框架支持不足 资源规划复用、异构计算支持不足 • 1:1的operator部署运维复杂 • 缺少队列概念 • 不同框架对作业管理、并行计算等要求不同 • 不支持集群资源的动态规划以及资源复用 • 计算密集,资源波动大,需要高级调度能力 • 对异构资源支持不足
18 .Volcano 帮助批量计算面对云原生的各种挑战 • 特性 1: 支持面向高性能负载的调度策略, e.g. fair-share, gang-scheduling • 特性 2: 支持多种作业生命周期管理, e.g. multiple pod template, error handling • 特性 3: 支持多种异构硬件, e.g. GPU, FPGA • 特性 4: 面向高性能负载的性能优化,e.g. scalability, throughput, network, container runtime
19 .分布式训练场景、大数据场景性能提升30%+ AI 分布式训练场景 • Gang-Scheduling:解决分布式训练ps-worker忙等、死锁问题,性能提升30%。 • Task-topology/ IO aware scheduling:最大程度降低传输时延,针对IO密集型应用,性能提升31% 大数据场景 • minResource: 解决高并发场景Spark driver和executor资源竞争问题,合理规划并行度,性能提升39.9% 分布式训练场景1 分布式训练场景2 大数据TPC-DS性能测试
20 .NUMA-Aware 调度实现计算加速 场景和诉求: • 计算密集型、性能要求高的作业独占CPU • 准队NUMA架构处理器,pod申请的CPU在相同NUMA node上, 减少通讯损耗 NUMA Architecture • K8s 提 供 的 topology manager 以 及 CPU manager 只 工 作 在 kubelet上,不参与作业调度。调度器无法感知节点NUMA拓扑 关键技术: • NUMA info组件上报节点NUMA信息 • Volcano提供NUMA aware插件,集合节点NUMA信息与Pod 携带的topology policy进行pod调度 NUMA-Aware scheduling
21 .资源共享、多种级别的公平调度 • 支持静态配置队列的Capacity • 支持多队列动态按比例(Proportion)共享集群资源、多种级别的公平调度 • 支持队列借贷模式,分时共享
22 .众多社区用户将 Volcano 应用到大数据、AI、科研平台 … https://github.com/volcano-sh/volcano/blob/master/docs/community/adopters.md
23 .企业、机构积极参与社区贡献 Volcano 社区 2020年度 Top贡献 企业、机构 • CNCF Sandbox: https://landscape.cncf.io/selected=volcano • 1900+ GitHub Stars • 150+ Contributors from Huawei, AWS, JD.com, OpenAI, Baidu, Tencent, etc. 16 formal releases • 30+ public adopters (private not included) • CII best practice: passing • License: Apache 2 License Data from https://volcano.devstats.cncf.io
24 .案例:Spark & AI 混合部署、隔离 1 WebUI 大数据作业提交平台 tf-job/pytorch-job spark-submit --master k8s:// …… Kubernetes spark-submit 指定volcano调度,同 时为作业指定相应的 --master 2 yarn:// …… K8s Master Volcano annotation,用于资 源隔离 Spark 集群 Kubelet Kubelet Kubelet Kubelet Kubelet Kubelet Spark Executor PS Worker RSS Driver Executor History SSD Server …… Node Node Worker Executor Driver 源数据 历史数据 1. 分时提交: • AI集群资源波谷时,spark作业提交到AI集群,提升资源利用率 • AI集群资源波峰时,spark作业提交到Yarn集群,防止对AI作业的干扰 数据存储 (OBS) 2. Volcano管理spark作业调度,进行节点资源隔离,限制spark作业使用率 - plugins: Region - name: nodewatermark arguments: spark-job1: cpu=10%,memory=50G spark-job2: cpu=2000m,memory=20%
25 .案例:某金融投资公司基于Volcano构建大规模计算平台 业务场景: • 某金融投资公司,业务场景主要为策略研究开发、AI 训练与推 理、大数据ETL和离线批处理任务 客户诉求: • 要求调度系统提供公平机制,满足公司内多团队资源共享,保 证各自业务的SLA • 要求系统提供Gang-scheduling解决基本死锁问题 • 要求调度系统统一支持AI、大数据、Batch Job 方案价值: • Volcano 统一支持AI、数据ETL和离线Batch job • Volcano提供的队列调度、公平调度策略,满足用户的多租户 资源共享的诉求 用户服务架构图 • 使用 Volcano,生产环境稳定支持30w Pod/天增长量 “Volcano is based on Kubernetes, and its robust job scheduling and control policies meet all of our requirements. Its simple architecture was a major reason we decided to migrate our scheduling platform from Yarn to Kubernetes.” -- Yunzhi Cheng, Director of Engineering at Ruitian Investment
26 .案例:某互联网电商大数据平台 客户价值 数据同步、 主站服务 清洗 Hive Spark TF-Job 高性价比: 特征工程 机器学习 ✓ 流量高峰弹至Serverless方式,按秒收费 拉取模型 模型上线 模型训练、 ✓ 多种弹性姿势,最快30s弹8000核,满足流量 模型生成 洪峰 在线服务 模型上线 高利用率: Cloud ✓ 全容器化部署,较传统方式资源利用率提升 Spark任务提交 20% Volcano调度引擎 K8s API Server ✓ 基于Volcano,提高20%调度效率 …… 免运维: label: CPU、GPU label: CPU ✓ 统一计算平台管理X万核转码算力 作业派发 Virtual Kubelet ✓ 自动+自定义弹性扩容,基础设施 托管K8s集群 Serverless集群
27 .社区版本发布 Volcano: A Kubernetes Native Batch System v1.0: v1.3: v1.4: v1.5: v1.x: • GPU Sharing • Support minAvailable at • Support multi-scheduler • Support Hierarchy Queue • Zone Awareness • Preempt and reclaim task level • Support CPU NUMA-Aware • Support Volcano scheduler scheduling upgrade to Beta • Support task-topology scheduling in Spark community • Improve the preemption • Job dynamic scale up • Support minSussess for • Support proportion of • Task Dag scheduling • Support job backfill and down Job resource for GPU node • configuration hot update • Improve the Autoscaling • Integrate with flink • Create new repository • …... • …... enficiency operator volcano.sh/apis • …... • DAG job based on Argo • …... 2020.7 2021.5 2021.9 2022.Q1 2022.Q2
28 . 公众号容器魔方 Volcano技术交流群 每日推送图文 添加小助手,发送“Volcano” 加群 社区最新动态、直播课程、技术干货 社区专家入驻,技术问题随时答疑
29 .