集群模式概述(Cluster Mode Overview)-- Spark 1.6

来源: http://spark.apache.org/docs/1.6.0/cluster-overview.html
下面是对上述来源中Spark官方文档的中文翻译

本文简要概述Spark如何在集群上运行,以便更容易地了解所涉及的组件。阅读应用程序提交指南(application submission guide ),了解在群集上启动应用程序。

组件

Spark应用程序作为一组进程独立的在集群上运行,由主程序中的SparkContext对象(称为驱动程序)协调。

具体来说,要在集群上运行,SparkContext可以连接到几种类型的集群管理器(Spark自己的独立集群管理器,Mesos或YARN),它们可以跨应用程序分配资源。 连接后,Spark会在集群中的节点上获取执行程序,这些进程是为应用程序运行计算和存储数据的进程。 接下来,它将应用程序代码(由JAR或Python文件定义传递给SparkContext)发送给执行者。 最后,SparkContext将任务发送给执行器来运行。

这个架构有几个有用的事情需要注意:

  1. 每个应用程序都有自己的执行进程,它们在整个应用程序的运行时间内一直存在,并且持续运行,还在多个线程中运行任务。这有利于在调度端(每个驱动程序调度其自己的任务)和执行器端(来自不同应用程序的任务在不同的JVM中运行)将应用程序彼此隔离。但是,这也意味着数据不能在不将其写入外部存储系统的情况下跨不同的Spark应用程序(SparkContext实例)共享。

  2. Spark对底层集群管理器是不可知的。只要它可以获得执行器进程,并且这些进程彼此通信,它也能够相对容易的在其他集群管理器上运行,即使这个集群管理器支持其他应用程序(例如Mesos / YARN)。

  3. 驱动程序必须在其生命周期内侦听并接受来自其执行器的传入连接(例如,请参阅 spark.driver.port and spark.fileserver.port in the network config section)。因此,驱动程序必须是工作节点的网络可可找到的。

  4. 因为驱动程序在群集上调度任务,所以它应该靠近工作节点运行,最好在同一个局域网上运行。如果你想远程发送请求到集群,最好打开一个RPC给驱动程序,并让它从附近提交操作,这比远离工作节点要好。

集群管理器类型

系统目前支持三个集群管理器:

  • Standalone - 包含在Spark中的简单集群管理器,可以轻松设置集群。
  • Apache Mesos - 一个通用集群管理器,也可以运行Hadoop MapReduce和服务应用程序。
  • Hadoop YARN - Hadoop 2中的资源管理器。
下表总结了您将看到的用于引用群集概念的术语:

|术语 |含义
|------------------
|Application | 用户基于Spark构建的程序。由集群上的* driver program executors组成。
|Application jar|包含用户的Spark应用程序的jar。在某些情况下,用户需要创建一个包含其应用程序及其依赖关系的“uber jar”。用户的jar不应包括Hadoop或Spark库,但是,这些将在运行时添加。
|Driver program|运行应用程序的main()函数并创建SparkContext的进程
|Cluster manager|用于获取集群上资源的外部服务(例如独立管理器,Mesos,YARN)
|Deploy mode|区分驱动程序进程运行的位置。在“集群”模式下,框架会启动集群中的驱动程序。在“客户端”模式下,提交器在集群外启动驱动程序。
|Worker node|任何可以在集群中运行应用程序代码的节点
|Executor|为工作节点上的应用程序启动的进程,它运行任务并在内存或磁盘存储中保存数据。每个应用程序都有自己的executors。
|Task|将发送给一个executor的工作单元
|Job|由多个任务组成的并行计算,它们响应Spark动作(例如:save,collect)而生成;可以在驱动程序日志中看到此术语。
|Stage|每个作业被分成更小的任务集,称为彼此依赖的
stages *(类似于MapReduce中的map和reduce阶段);可以在驱动程序日志中看到此术语。

推荐阅读更多精彩内容