正文
Spark集群模式概述
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
作者:foreyou
出处:http://www.foreyou.net/2015/06/22/spark-cluster-mode-overview/
声明:本文采用以下协议进行授权: 署名-非商用|CC BY-NC 3.0 CN ,转载请注明作者及出处。
本篇文章作为理解Spark框架的入门文章,对《Spark Cluster Mode Overview》的翻译。
集群模式概述
为了便于理解
Spark
框架的组件,这篇文章对
Spark
是如何运行在集群上做了概述。如果想要知道如何提交应用程序给
Spark
集群可以通读《application submission guide》。
组件
Spark
应用程序以一组独立的进程的运行在集群上,由在主程序(称之为
DriverProgram
)中的
SparkContext
对象来协调这些进程。
SparkContext
可以连接到多种跨应用程序的资源分配集群管理器(比如,
Spark
自己的
Standalone
和
Mesos/Yarn
等),以运行
Spark
集群。一旦连接到集群,
Spark
便能获得了集群内部节点上的
Executor
。每个
Executor
都是集群节点上的一个为应用程序提供计算和数据存储的进程。然后,
SparkContext
会将代码发送给
Executor
。最后,
SparkContext
会把任务发给
Executor
执行。
关于这个架构,有几个值得注意的细节:
-
每个应用程序都会得到属于自己的一组
Executor
进程,这些进程伴随在应用程序的整个生命周期内,会一直以多线程的方式执行任务。这得益于应用程序彼此之间在调度和执行两端的都是分离的,因为每个driver program
都只会调度自己应用程序的任务,同时不同应用程序的任务都会运行在不同的JVM
中。这也意味着,除非将数据写到外部存储,否则Spark
应用程序(SparkContext
实例)之间没法共享数据。 -
Spark
对于底层的集群管理器是不可见的。只要获得Executor
并让他们之间能够彼此通信,在集群管理器(例如,Mesos/Yarn
)上运行Spark
应用程序就会变得相对容易,这些集群管理器还可以运行其他类型的应用程序。 -
在
Driver program
的整个生命周期内,它都要接听和接受来自Executor
的连接请求(详见spark.driver.port and spark.fileserver.port in the network config section)。这样Driver program
必须是从工作节点网络可寻址的。 -
因为
Driver program
是用来调度任务在集群上执行的,所以它运行的节点应该尽量靠近工作节点,最好是同一个局域网。如果你想远程发送请求到集群,最好开一个RPC到driver
,并把它提交到一个靠近集群的driver
而不是一个远离工作节点的driver
。
集群管理器类型
Spark
系统目前支持三种类型的集群管理器:
-
Standalone
-Spark
框架提供的便于其创建集群的一种集群管理器。 -
Apache Mesos
- 一个也可以运行Hadoop
MapReduce
和服务程序的通用集群管理器。 -
Hadoop YARN
-Hadoop 2
的资源管理器。
除此之外,
Spark
还提供了
EC2 launch scripts
便于其在
Amazon EC2
之上建立
Standalone
集群。
提交应用程序
应用程序可以使用
spark-submit
脚本提交到集群上去运行。《application submission guide》介绍了详细步骤。
监控(Monitoring)
每个
Driver program
都有一个对应的网络UI,应用程序端口为4040,用于显示有关正在运行的任务,
Executor
,以及存储使用情况的信息。在浏览器内通过
http://<driver-node>:4040
链接访问此网络UI。《monitoring guide 》还介绍了其他监控选项。
作业调度(Job Scheduling)
Spark
框架下,既有跨应用程序的资源分配(集群管理器级别),也有应用程序内资源分配(如果在同一个SparkContext上发生了多个计算)。详见《job scheduling overview》。
术语(Glossary)
下表汇总了
Spark
框架下的概念术语:
术语 | 意思 |
---|---|
Application
|
在
Spark
上构建的程序,由
Driver program
和集群上的
Executor
组成
|
Driver program
|
运行
main()
函数和创建
SparkContext
的进程
|
Cluster manager
|
用于获取集群上资源的外部服务(例如,
Standalone
,
Mesos
,
YARN
)
|
Worker node
|
集群中任意可以运行应用的节点 |
Executor
|
在工作员节点上为应用所启动的一个进程,可以运行任务以及可以在内存或是硬盘中保存数据。每一个应用都有属于自己的一组
Executor
|
Task
|
一个可以被发送给
Executor
的工作单元
|
Job
|
一个用于响应
Spark action
(例如,
save
,
collect
)的多任务组成的并行计算;你可以在驱动日志中看到这个术语
|
Stage
|
每个工作被分为较小相互依赖的
Task
集合称为
Stage
(和
MapReduce
中的
map
和
reduce
阶段相似); 你可以在驱动日志中看到这个术语
|