1. 组件
Spark applications 是在运行在集群上一系列独立的进程集合,由SparkContext进行调度。
SparkContext 能够连接以下几种集群管理:standlone cluster manafer,Mesos,Yarn。这些集群管理负责资源的分配。
- 一旦SparkContex连接上集群管理,Spark要求集群中的节点分配executors,executors 是服务于applications进行计算和存储数据的进程。
- 然后,SparkContext把application的code 发送给executors。
- 最后,SparkContext把task 发送给executors去运行。
这有一些关于这个结构很有意思的事情。
- 每一个appplication 拥有自己的 executor, executor 伴随着application整个生命周期,在多个线程中运行task。这样的好处是,把各个application隔离开来,不仅表现在调度端而且在执行端有所体现。在调度端,每个driver调度自己的tasks。在执行端,不同application的task在不同的JVM中运行。同时这也意味着,不同application的数据只能通过外部发的存储系统进行共享。
- Spark 对于底层的资源管理器是不可知的。一旦spark拥有executor 进程 以及它们之间的通信,那么它能够很容易的在另一个资源管理器中运行(Mesos,Yarn)。
- Driver Program 在生命周期内监听和接收来自executors的连接。因此,Driver Program 对于work node 来说是可寻址的。
- 因为driver在集群中调度task,因此它需要和work node 尽可能近,建议是在同一个局域网中。如果你想远程发送一个请求,最好是通过RPC的方式提交给最近的driver来提交操作。而不是在远离work node上driver 提交。
2. 资源管理器的种类
- standlone
- Apache Mesos
- Hadoop YARN
- Kubernetes
3. 关键术语
术语 | 含义 |
---|---|
Application | 构建在Spark之上的用户程序。包含一个driver program和集群上的executors |
Application.jar | 包含用户程序的jar包,用户程序的jar包不包含Hadoop 和 Spark的依赖,这些在运行期间会被添加 |
Driver Program | 运行application的main()函数的进程,创建SparkContext |
Cluster Manager | 用于在外部分配资源的服务,例如 standlone manager,Mesos,YARN |
Deploy mode | 用于区分driver process 在哪里运行。在cluster 模式下,框架在集群内部运行driver。在client模式下,任务的提交者在集群之外运行driver。 |
Work node | 在集群中,能够运行application 代码的节点 |
Executor | 在工作节点上运行的为application服务的进程。Executor 运行task,在内存或磁盘中存储数据。每个application 有自己的executors。 |
Task | 一系列工作的集合,被分发到一个executor中。 |
Job | 一个并行的计算,包含多个task,由Spark action 产生,在driver 的log会看到。 |
Stage | 每个job被分割成更小集合的task,被称作stage。stage之间互相依赖,在driver的日志中,你能够看到它们 |