Spark官方文档-集群模式概览

Spark官方文档-集群模式概览

集群模式概览

本文档为Spark是如何运行在集群上的提供了一个简短的概览,目的是使涉及到的各个组件更容易理解。请阅读应用提交指南来学习如何在一个集群上启动应用。

组件

Spark应用在一个集群上以一组独立的进程运行,通过在你的主程序(叫做驱动程序)中的SparkContext对象进行协调。

特别地,为了在一个集群上运行,SparkContext可以连接几种类型的集群管理器(Spark自己的standalone集群管理器,或者是Mesos,或者是YARN),集群管理器可以在应用之间分配资源。一旦连接之后,Spark便捕获了集群中节点上的executors,executors是为你的应用执行计算以及存储数据的进程。接下来,它将你的应用程序(传递给SparkContext的通过JAR或者Python文件定义的)发送给executors。最后,SparkContext将tasks发送给executors来执行。

enter image description here

关于这个架构有一些需要注意的地方:

  1. 每个应用都会获得它自己的executor进程,这些executor进程在整个应用的生命期都存在,并且以多线程执行tasks。这种方式具备应用之间彼此隔离的优点,既在调度方(每个驱动程序调度它自己的tasks)实现隔离,也在executor方(来自不同应用的tasks运行在不同的JVMs)实现隔离。然而,这种方式同样意味着如果没有将数据写到外部存储系统,则不能在不同的Spark应用(SparkContext实例)之间分享数据,
  2. Spark对于底层集群管理器是透明的。只要Spark可以捕获executor进程,并且这些进程可以彼此通信,则可以相当容易地在一个同样支持其他应用的集群管理器(例如Mesos/YARN)上运行Spark。
  3. 驱动程序必须在它的整个生命期监听并且接受来自它的executors的连接请求(例如,在网络配置章节查看spark.driver.port)。这样,驱动程序对于worker节点必须是网络可寻址的。
  4. 由于驱动程序在集群上调度tasks,所以它应该运行得离worker节点近一些,最好是在相同的局域网。如果你想要远程给集群发送请求,最好是给驱动程序打开一个RPC,并且用它从附近提交操作,而不是在离worker节点很远的地方运行一个驱动程序。

集群管理器类型

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

  • Standalone – 一个被包含在Spark中的简单的集群管理器,使得创建一个集群很容易。
  • Apache Mesos – 一个通用的集群管理器,也可以运行Hadoop MapReduce和服务应用。
  • Hadoop YARN – Hadoop 2中的资源管理器。
  • Kubernetes(实验性的)- 除了上面的之外,对Kubernetes还有实验性的支持。Kubernetes是一个提供容器化基础设施的开源平台。对Kubernetes的支持正由一个apache-spark-on-k8s Github组织所开发。需要文档的话,可以参考那个项目的README。

提交应用

可以使用spark-submit脚本将应用提交到任何类型的集群上。应用提交指南描述了如何做。

监控

每个驱动程序都有一个web界面,通常都是用端口4040,web界面会展示关于运行tasks,executors和存储使用的信息。只需要在web浏览器上访问http://driver-node:4040就可以进入这个界面。监控指南还描述了其他监控选项。

Job调度

Spark同时在应用之间(在集群管理器的级别),和应用内部(如果在相同的SparkContext上发生了多个计算)进行了资源分配的控制。job调度概览对此进行了更加详细的描述。

术语

下面的表格总结了涉及集群概念的术语:

  • Application:构建在Spark上的用户程序。包含一个驱动程序和集群上的executors。
  • Application jar:一个包含用户的Spark应用的jar。有些情况下用户想要创建一个包含他们的应用并带有依赖的”uber jar”。用户的jar永远都不应该包括Hadoop或者Spark库,这些库会在运行时被添加。
  • Driver program:执行应用的main()函数并且创建SparkContext的进程。
  • Cluster manager:在集群上获得资源的一个外部服务(例如standalone管理器, Mesos, YARN)。
  • Deploy mode:用于区分驱动进程在哪运行。在”cluster”模式下,框架会在集群内部启动驱动进程。在”client”模式下,提交者会在集群之外启动驱动进程。
  • Worker node:在集群中任何可以运行应用代码的节点。
  • Executor:一个为一个应用而在woker节点上启动的进程,它运行tasks并将数据保存在内存或者磁盘。每个应用都有它自己的executors。
  • Task:一个被发送给一个executor的工作单位。
  • Job:一个由Spark action(例如save,collect)触发的包含多个tasks的并行计算;你将会在驱动的日志里看到这个术语。
  • Stage:每个job都被划分成叫做stages的更小的tasks集合,这些stages彼此依赖(类似于MapReduce中的map和reduce);你将会在驱动的日志里看到这个术语。

参考资料

本文译自Cluster Mode Overview

发表评论

电子邮件地址不会被公开。 必填项已用*标注