Spark 集群模式概述

目录 [−]

  1. 组件
  2. 集群管理器类型
  3. 提交应用
  4. 监控
  5. Job调度
  6. 词汇表

这篇文章简要介绍了怎么将Spark运行在集群之上, 便于理解其使用的组件。 你可能需要阅读应用提交指南了解如何提交应用到Spark集群中。

组件

Spark应用程序在集群中以独立的进程运行, 由你的主程序(称之为驱动程序diver program)的SparkContext协调运行。 具体而言, 为了在Spark集群中运行应用, SparkContext可以连接几种类型的集群管理器cluster managers (既可以是Spark自己的独立集群管理器,也可以是第三方的比如Mesos/YARN), 管理器负责跨应用分配资源. 一旦连接成功,Spark获得集群节点上的executors, executor是为你的应用运行计算和存储数据的进程。 接下来它会发送你的应用代码(传给SparkContext的JAR 或者Python文件) 给executors. 最后SparkContext发送任务tasks让executor来运行.


此架构中需要注意的几个有用的东东:

1) 每个应用只能得到它自己的executor进程。 服务于整个程序的生命周期, 并使用多个线程来运行任务。 这样设计有利于隔离应用, 包括任务调度scheduling side (每个驱动只调度自己的任务) 和executor(来自不同的应用的任务只运行在自己相应的JVM上). 但是, 这也意味着如果不把数据写入到共享存储系统中的话数据不能在Spark application (SparkContext实例)之间共享.
2) Spark不知道使用的底层集群管理器. 它可以请求executor进程, 并彼此交流,这些都可以相对容易的运行在集群管理器之上。 这些集群管理器如Mesos/YARN也可以支持其它应用.
3) 由于驱动程序在集群上调度任务, 它应该运行在很近的worker节点上, 优先运行于本地网络上的节点. 如果你想发送请求到远程的集群,最好使用RPC从集群本地网络提交,而不是远程使用worker节点. (译者按:网络传输的速度会影响性能,并带来不稳定性)

集群管理器类型

当前Spark支持下面三种集群管理器:

  • Standalone – Spark自带的简单的集群管理器, 很容易的建立Spark集群.
  • Apache Mesos – 一个通用的集群管理器,可以运行Hadoop MapReduce和其它服务应用.
  • Hadoop YARN – Hadoop 2提供的管理器.

另外 Spark’s EC2 launch scripts 可以帮助你容易地在Amazon EC2上启动standalone cluster.

提交应用

使用spark-submit脚本可以提交应用到任意类型的集群服务器中. 应用提交指南介绍了这方面的内容.

监控

每个驱动程序都有一个WEB UI, 缺省使用4040, 用来显示运行的tasks, executors, 存储等信息。 用浏览器打开http://:4040即可。 Spark 监控指南介绍相关的内容.

Job调度

Spark可以控制跨应用的资源分配。(在集群管理器层) 或者在应用内部(如果在同一个SparkContext有多个计算时). job 调度概览 描述了细节.

词汇表

下面的表格总结一些术语。

术语意义
Application建立在Spark上的应用. 包括一个驱动程序和集群上的executor.
Application jar一个包含用户Spark application的jar文件. 某些情况下用户可能会把一些依赖同应用都打进一个jar文件中, 但是这个jar文件不应包含Hadoop 或者 Spark 库, 在运行时它们会被加上.
Driver program运行应用的main()函数的进程, 并创建SparkContext
Cluster manager在集群上分配资源的外部服务(如 standalone manager, Mesos, YARN)
Deploy mode区分驱动进程是怎样运行的. 在cluster模式下,框架会在集群中启动驱动,在client模式下, 提交者在集群外部启动驱动
Worker node集群中运行应用代码的节点
Executor在worker节点上为应用启动的进程, 运来运行任务task, 在内存或磁盘上中保存数据。 每个应用都有它自己的executor
Task发送给一个executor的工作单元
Job包含多个task的一个并行计算。根据Spark action(如 save, collect)而创建。可以在驱动的log日志中看到此术语
Stage每个job被分成一撮task, 称之为stage。 (类似MapReduce的map/reduce stage); 可以在驱动的log日志中看到此术语. 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.

翻译自 Cluster Mode Overview