Spark 部署文档-Spark 集群模式概览-1

Descriptions:

最近正在系统学习 Spark ,本篇文章翻译自 Spark 官方指导文档 如有不当之处敬请指正,联系邮箱: kylin27@outlook.com


Cluster Mode Overview

Spark集群模式概览

This document gives a short overview of how Spark runs on clusters, to make it easier to understand the components involved.

本文档简要介绍了 Spark 的集群运行模式,目的是为了让用户更加容易了解 Spark 中涉及到的组件。

Read through the application submission guide to learn about launching applications on a cluster.

用户可以通读如何向 spark 集群提交应用程序指导手册来了解如何在集群上运行应用程序。

Components

Spark 中的组件

Spark applications run as independent sets of processes on a cluster, coordinated by the SparkContext object in your main program(called the driver program).

Spark 应用程序以独立的进程集合运行与集群之上,并被位于主程序(这个主程序也被称作是驱动程序)中称作 Spark 上下文(SparkContext)的对象实例所协调调度。

Specifically, to run on a cluster, the SparkContext can connect to several types of cluster managers(either Spark’s own standalone cluster manager, Mesos or YARN), which allocate resources across applications.

特别值得注意的是,以集群运行的 Spark 中的 SparkContext 可以连接多种类型的用于跨应用程序分配资源的集群调度器(这个调度器既可以是 Spark 自己独立的集群资源管理器,也可以是 Mesos 或是 YARN).

Once connected, Spark acquires executors on nodes in the cluster, which are processes that run computations and store data for your application.

一旦 Spark 与资源调度器二者相连接,Spark 便会向位于集群中的多个结点索取执行器资源。这些执行器由多个进程构成的专门用来为你的应用程序提供计算和存放数据的功能。

Next, it sends your application code (defined by JAR or Python files passed to SparkContext) to the executors.

接下来你所提交的应用程序代码(被传递给 Spark 上下文对象实例的应用程序代码是以 JAR 或者是 Python 文件所存放的)会被发送给位于集群中各个结点的执行器上。

Finally, SparkContext sends tasks to the exeuctors to run.

最后,Spark 上下文对象便会将任务分发给执行器来运行。

There are several useful things to note about this architecture:
对于上述的这种架构下面是几点有用的建议:


1. Each application gets its own executor processes, which stay up for the duration of the whole application and runs tasks in multiple threads. This has the benefit of isolating applications from each other, on both the scheduling side( each driver schedules its own tasks) and executor side (tasks from different applications run in different JVMs). However, it also means that data cannot be shared across different Spark applications (instances of SparkContext) without writing it to an external storage system.

1. 每个应用程序都有着属于它自己的多个执行器进程,这些执行器进程会在该应用程序的整个生命周期中存活,并且将分配给它们的任务以多线程的方式来运行。 这种机制有利于让应用程序彼此之间保持隔离,无论是资源调度方面的隔离(程序各自的驱动程序调度各自的任务),还是在程序在执行期间的隔离(隶属于不同应用的任务各自运行在不同的 JVM 中)。然而这种隔离同样也意味着位于 多个Spark 应用程序(就是包含 SparkContext 对象实例的程序)中的数据如果不将其写入到外存存储系统的话是无法在多个 Spark 应用程序间被共享的。


2. Spark is a agnostic to the underlying cluster manager. As long as it can acquire executor processes, and these communicate with each other, it is relatively easy to run it even on a cluster manager that also supports other applications (e.g. Mesos/YARN).

2. 在 Spark 集群底层可以使用多种类型的集群调度器来管理(agnostic 不可知,在这里指的是未来的 Spark 集群底层可能不仅仅支持一种资源调度器)。 只要这种资源调度器可以获取 Spark 中的执行进程并且支持进程彼此之间的正常通行就可以,即便将用于管理其他类型集群的像是 Mesos 或是 YARN 这些管理器用于管理 Spark 集群也并不是什么难事。


3. The driver program must listen for and accept incoming connections from its executors throughout its lifetime(e.g, see spark.driver.port and spark.fileserver.port in the network config section). As such, the driver program must be network addressable from the worker nodes.

3. 驱动程序必须在其整个生命周期内来监听与接收来自其执行器的连接请求(请看在网路配置章节中的 spark 驱动端口和 spark 文件服务器端口示例文档)。 如此一来,该驱动程序对工作结点来说必须要通过网络地址来定位查找到的才可以。


4. Because the driver schedules tasks on the cluster, it should be run close to the worker nodes, preferably on the same local area network. If you’d like to send requests to the cluster remotely, its’s better to open an RPC to the driver and have it submit operations from nearby than to run a driver far away from the worker nodes.

4. 由于驱动程序负责调度集群中的任务, 所以对于驱动程序来说它里其所调度的工作结点物理位置越近越好,最好通过本地地址可以直接访问到其所控制的工作节点。 如果你打算向远程集群发送请求信息的话,最好的处理方式便是通过创建一个到驱动程序 RPC 连接,通过 RPC 来决定向哪一个驱动程序提交请求操作信息,而不是调用一个物理距离其工作结点很远的驱动程序。

Cluster Manager Types

The system currently supports three cluster managers:

  • Standalone - a simple cluster manager included with Spark that makes it easy to set up a cluster.
  • 单机模式 - 该模式是基于 Spark 自身包含的集群资源管理器来启动 Spark 的,该资源管理器的作用便是是为了让集群易于启动。

  • Apache Mesos - a general cluster manager that can also run Hadoop MapReduce and service applications.

  • 基于 Apache Mesos 的集群模式 - Apache Mesos 是一种普遍被用于集群资源管理的调度器,也可以用作 Hadoop MapReduce 和其他服务应用的资源调度器。
  • Hadoop YARN - the resource manager in Hadoop 2.
  • 基于 Hadoop YARN 的集群模式 - Hadoop YARN 是应用于 Hadoop 2版本中的资源管理调度器。

In addition, Spark’s EC2 launch scripts make it easy to launch a standalone cluster on Amazon EC2.

除了上述的资源调度器之外, 通过运行 Spark 中的 EC2 启动脚本也可以很容易地在 Amazon 的 EC2 服务器上以单机模式来启动 Spark 。

Submitting Applications

关于如何向 Spark 上提交应用

Applications can be submitted to a cluster of any type using the spark-submit script.

可以使用Spark 自带的 spark-submit 脚本来将应用程序提交到上述 Spark 的任意一类集群的上。

The application submission guide describes how to do this.

这篇 [如何向 Spark 集群提交应用程序教程] 上详细记录了如何提交应用到 Spark 集群。

Monitoring

关于 Spark 集群监控

Each driver program has a web UI, typically on port 4040, that displays information about running tasks, executors, and storage usage.

每个驱动程序都有其用于展示任务运行,执行器状态以及存储详细信息的 web 图形展示界面,该图形界面的访问端口号通常是 4040。

Simply go to http://:4040 in a web browser to access this UI. The monitoring guide also describes other monitoring options.

(你只要)简单地在浏览器中输入这个网址 http://:4040 Spark 的图形用户界面就展示在你眼前了。

The monitoring guide also describes other monitoring options.

Spark 集群监控教程这一文档中同样也介绍了其他用于 Spark 集群监控的选项。

Job Scheduling

作业调度

Spark gives control over resource allocation both across applications(at the level of the cluster manager) and within applications(if multiple computations are happening on the same SparkContext).

Spark 同时在跨应用程序和在应用程序中充当着掌控资源分配的角色,在跨程序资源分配中 Spark 是作为集群管理者来进行资源分配,而当 SparkContext 中同时执行多个计算时 Spark 会在应用程序内进行资源分配。

The job scheduling overview describes this in more detail.

作业调度概览一文中对此进行了详细的介绍。

Glossary

Spark 集群术语列表

The following table summarizes terms you’ll see used to refer to cluster concepts:

下面表格总结了 Spark 集群中常用到的概念术语:

术语/解释

  • Application
  • 应用程序
  • Using program built on Spark. Consists of a driver program and executors on the cluster.
  • 运行在 Spark 平台上的程序。(这种程序通常是)由集群上的一个驱动(程序)和多个执行器(程序)所组成的。

  • Application jar
  • jar 文件格式的应用程序
  • A jar containing the user’s Spark application. In some cases users will want to create an “uber jar” containing their application along with its dependencies. The user’s jar should never include Hadoop or Spark libraries, however, these will be added at runtime.
  • 所谓的 jar 应用程序指的是将用户自己编写的 Spark 代码打包成 jar 应用程序。在某些场合用户会将应用程序和其所依赖的文件打包成一个 “uber jar” 类型文件。 但是值得注意的是,用户是万万不可在生成应用 jar 文件时将应用程序中所依赖的 Hadoop 或是Spark 库文件一并加载到其中的。应用程序中所使用的Hadoop 和 Spark 库会在应用程序的运行期由 Spark 集群平台来提供。

  • Driver program
  • 驱动程序
  • The process running the main() function of the application and creating the SparkContext
  • 驱动程序指的是代码中包含程序入口函数 main() 方法同时在代码中创建 SparkContext 对象的程序。

  • Cluster manager
  • 集群调度器/其实叫做集群管理器也行啦~
  • An external service for acquiring resources on the cluster( e.g. standalone manager, Mesos, YARN)
  • 用于在集群中获取资源的(不属于集群的)外部服务程序(就像是 Spark 单机结点启动的资源管理器,或是第三方像 Mesos , YARN 这样的资源调度框架)

  • Deploy mode
  • (Spark的)部署模式
  • Distinguishes where the driver process runs. In “cluster” mode, the framework launches the driver inside of the cluster. In “client” mode, the submitter lanuches the driver of the cluster.
  • 集群的部署模式这一术语是用来区分驱动程序在何处运行的。如果是以”集群”模式运行的,指的是 Spark 这个计算框架在集群中来调用驱动程序的。 如果是以”客户端”模式运行,那便是 Spark 中的 submitter/任务提交者在集群之外调用驱动程序来启动的。

  • Worker node
  • 工作结点
  • Any node that can run application code in the cluster.
  • 在集群中只要能跑应用程序代码的结点都叫做工作结点

  • Executor
  • 执行器
  • A process launched for an application on a worker node, that runs tasks and keeps data in memory or disk storage across them. Each application has its own executors.
  • 在用于运行任务并在内存或是磁盘上保存数据的工作结点上为执行应用程序而启动进程便可以称它是执行器。每个应用都有其自己的一组执行器。

  • Task
  • 任务
  • A unit of work that will be sent to one executor.
  • 任务指的是将会被发送给一个执行器的一系列工作。

  • Job
  • 作业
  • A parallel computation consisting of multiple tasks that gets spawned in response to a Spark action(e.g. save, collect); you’ll see this term used in the driver’s logs.
  • 作业指的是由多个任务所构成的并行计算操作。 这些任务从 Spark 所响应的操作(例如存储,收集数据)中获取执行结果;作业在驱动程序所打印的日志文件中是比较常见的术语。

  • Stage
  • 阶段
  • Each job gets divided into smaller sets of tasks called stages that depend on each other(similar to the map and reduce stages in MapReduce); you’ll see this term used in the driver’s logs.
  • 每份作业在被执行的时候都会被分割成由更小粒度的任务构成的集合。而该任务又被称作是’阶段’,而这些多个阶段彼此间是相互依赖的(就和 MapReduce 中的 map阶段和reduce阶段类似);’阶段’这一术语在驱动程序打印的日志中比较常见。

end