1、SPARK ON K8S在阿里云上的实践范佚伦(子灼),阿里云 开源大数据部技术专家|01Spark on K8s介绍介绍02Spark on K8s在阿里云在阿里云EMR的优化和最佳实践的优化和最佳实践目录目录CONTENT|Spark on k8s介绍部署架构社区进展重点特性01|Spark的集群部署模式|Hadoop YARN生产环境里最常用的部署方式源于Hadoop,具有良好的社区生态Standalone使用Spark内置调度器,不适用生产环境Spark支持多种类型的Cluster Manager,用于申请和分配程序(driver/executor)的资源Apache Mesos也是一
2、个分布式资源管理框架,支持容器化随着K8s兴起,使用者越来越少Kubernetes直接使用K8s调度和申请Spark作业资源,2021年Spark 3.1.1正式GASpark部署在K8s的优势|统一运维方式充分利用K8s社区生态,日志监控等工具减少多个集群维护成本提高资源利用率越来越多的在线应用集群、AI集群都运行在K8s里。Spark作业可以共享这些已有的集群资源,提高利用率。在云上具备更好的弹性(如弹性容器实例),真正做到按量付费容器化优势通过容器镜像管理依赖,提高Spark任务可移植性多版本支持。不同Spark版本只是不同的镜像,做到了版本只和作业有关,和集群无关对于版本升级、A/B
3、Test更加友好Spark on K8s部署架构|https:/spark.apache.org/docs/latest/running-on-kubernetes.html方式一:使用原生spark-submitK8s集群内无需提前配置和安装任何组件提交作业的Client端需要安装Spark环境并配置kubectl通过spark-submit提交作业,需要指定k8s apiserver地址及Spark镜像地址Spark on K8s部署架构|方式一:原生spark-submit运行流程用户在Client端执行/bin/spark-submit命令命令会在Client端启动SparkSubmi
4、tJava进程,通过fabric8的kubernetes-client请求K8s集群创建Driver PodDriver Pod启动后,Driver负责连接k8s apiserver按需申请Executor Pod作业运行完成后,Driver负责清理所有Executor Pod。Driver Pod结束后会保留Completed状态,以便于日志等状态查看。Spark on K8s部署架构|方式二:使用spark-on-k8s-operator由Google开源,是目前最常用的一种提交作业方式K8s集群需要事先安装spark-operatorClient端通过kubectl提交一种yaml来提交
5、作业这种operator+CRD模式也是kubernetes官方推荐的一种部署复杂应用的模式本质上是对原生方式的扩展,最终提交作业依然是使用spark-submit方式,扩展的功能包括:定时调度,作业管理,监控,Pod增强等https:/ on K8s部署架构|方式二:spark-on-k8s-operator运行流程用户准备好作业的yaml描述文件,通过kubectl提交K8s集群内常驻的spark-operator pod会监听SparkApplication类型的事件,收到创建事件后,依然通过原生spark-submit方式提交Spark作业spark-operator可以通过k8s的M
6、utating Admission Webhook机制,拦截Kubernetes API请求,实现对Driver和Executor Pod的一些自定义配置spark-operator通过监听Driver和Executor Pod事件,更新SparkApplication的状态Spark on K8s部署架构-对比|原生spark-submit优点通过spark-submit命令提交,符合用户习惯支持Spark Client模式,可以运行交互式作业(spark-shell)Client端本地依赖(jar包等资源)可以直接提交与大数据调度平台集成性更好spark-on-k8s-operator优点