Spark集群模式概述

1 集群模式概述

首先在这里先简单介绍一下集群模式。Spark是一个大数据分析框架,自然会涉及到在集群上运行一些应用。这里只给出了如何让Spark运行在集群上的一些简单概述来便于理解涉及到的一些组件。

2 组件

Spark的应用程序是作为一组独立的进程运行在集群上的,在主程序(称为驱动程序,driver program)中通过SparkContext来协调这些进程。

具体来说,Spark可以通过连接到一些集群管理器(比如Spark自己的standalone集群管理器,或Mesos和YARN)来在集群上运行 ,集群管理器在应用之间分配与管理资源。一旦连接到集群管理器,Spark就向集群节点请求执行器。执行器(executor)就是应用中进行计算和存储数据的进程。然后,Spark会向执行器发送应用代码(传递给SparkContext的jar或Python文件)。最后,Spark向这些执行器发送要执行的任务(task)。下图就是整个流程:


这里需要注意的几点是:

  1. 每一个应用程序有自己的执行器进程,这些进程会在整个应用运行期间以多线程的方式执行Spark发送的任务。这有助于在调度阶段(每个驱动调度自己的任务)和执行阶段(不同应用的任务运行在不同的java虚拟机JVM上)隔离多个应用。不过这也意味着不能在应用间共享数据,除非将数据写到外部存储系统中。
  2. Spark对于底层的集群管理器是不可知的。只要Spark能够从集群管理器获得执行器节点,而且这些节点间也能通信,那么Spark也能容易的运行在支持其它应用程序的集群管理器(比如Mesos和YARN)。
  3. 驱动程序必须在它整个生命周期内监听并接受从它的执行器发送的连接请求。因此,驱动程序对于工作节点来说必须是地址可达的。
  4. 由于驱动程序在集群上调度任务,它最好和工作节点在一个网络内。如果要从远程给集群发送请求,那么最好给驱动程序启动一个远程过程调用协议(RPC)来从相对近的地方提交操作。

3 集群管理器的种类

Spark目前支持一下三种集群管理器:

(1)standalone:Spark自带的集群管理器,它可以很容易的在集群上运行程序;

(2)Apache Mesos:这是一个通用的集群管理器,既可以运行Hadoop的MapReduce也可以运行长期运行的服务应用;

(3)Hadoop YARN:YARN是Hadoop 2.0中引入的集群管理器;

而且,Spark的EC2启动脚本也能在Amazon EC2上启动standalone集群。

4 提交应用

可以使用spark-submit脚本来提交应用。在后序的文档中会做详细的介绍。

5 监测

每一个驱动程序都有一个Web UI界面,通常在4040端口,这个界面展示了正在运行的任务,执行器和存储空间使用情况等信息。可以通过访问http://<driver-node>:4040访问这个界面。

6 任务调度

Spark提供应用间(在集群管理器层)的和应用内(如果在同一个SparkContext上运行多个计算)的资源管理控制。

7 术语

下面列出了在集群模式中会遇到的概念:

  1. 应用(Application):构建在Spark上的用户程序,包括驱动程序和集群上的执行器;
  2. 应用jar包(Application jar):一个包含用户的Spark应用的jar文件。在一些情况下用户可能会创建一个超级jar包(Uber jar),来包含应用和依赖。用户的jar包不要包含Spark和Hadoop的依赖,这些会在运行时添加;
  3. 驱动程序(Driver program):就是执行应用中的main方法并创建SparkContext的进程;
  4. 集群管理器(Cluster manager):一个可以在集群上获得资源的外部组件(比如standalone,Mesos和YARN);
  5. 部署模式(Deploy mode):部署模式用来分别驱动程序在哪里运行。在集群(cluster)模式,框架将驱动程序启动在急群众。在客户端(client)模式,驱动程序在集群外启动;
  6. 工作器节点(Worker node):集群中任何可以运行应用的节点;
  7. 执行器(Executor):在工作器节点上运行应用的进程,可以执行任务,保存数据。每个应用都有自己的执行器;
  8. 任务(Task):发送给一个执行器的一组计算;
  9. 工作(Job):由一组执行Spark行动操作的任务构成的并行计算,可以在驱动程序的日志中看到这个术语;
  10. 阶段(Stage):每一个工作分解为若干个小的一组任务叫做阶段(和MapReduce中的map阶段和reduce阶段类似)。

你可能感兴趣的:(spark)