本文介绍 Spark 中涉及到的几个基础概念相关名词及其在 Spark 程序(即用户程序, Application)运行过程中的作用,初探 Spark 程序的运行原理。
上图是源自 Spark 官方文档对 Spark 程序运行架构的高度抽象,下文将围绕该图示进行阐述。
- Cluster Manager
Spark 程序在集群上运行时,需要集群管理者 (Cluster Manager) 为程序分配其运行所需要的资源。Spark 程序是通过一个 SparkContext 对象向 Cluster Manager 发起资源请求的,目前支持的 Cluster Manager 有 Spark standalone cluster manager, Mesos, YARN 或 Kubernetes,我们的集群是使用 YARN 管理的。 - Worker
Worker 是和 Cluster Manager 一个范畴的概念,即 Cluster Manager 所管理的集群中可用于计算或存储的主机/虚拟机节点。 - Driver program
运行 Spark 程序 main 函数的进程,负责创建 SparkContext 对象进而能向 Cluster Manager 发起资源请求。该进程运行的主机节点是 Driver 节点。当 Spark 程序以 yarn client 模式提交时,负责提交 Spark 程序的主机(client)作为 Driver 节点;当 Spark 程序以 yarn cluster 模式运行时,运行 spark-submit 脚本的节点(client) 负责将 Spark 程序和参数传到集群,由 cluster manager 节点 (yarn ResourceManager) 选取一个 NodeManager 启动 Application Master 进程,并由 Application Master 进程调用 Spark 程序 main 函数,创建 SparkContext 通过 Application Master 向 Cluster Manager 发起资源请求。从深层次的含义讲,yarn-cluster 和yarn-client 模式的区别其实就是 Application Master 进程的区别,yarn-cluster 模式下,driver 运行在AM (Application Master) 中,它负责向YARN申请资源,并监督作业的运行状况。当用户提交了作业之后,就可以关掉 Client,作业会继续在 YARN 上运行。然而 yarn-cluster 模式不适合运行交互类型的作业。而 yarn-client 模式下,Application Master 仅仅向YARN请求executor,client 会和请求的 container 通信来调度他们工作,也就是说 client 不能退出。