spark集群模式的概述(cluster mode overview)

文章来自http://spark.apache.org/docs/latest/cluster-overview.html

Component

spark应用程序以独立进程的集合的方式运行在集群中,通过driver program中的SparkContext对象进行协调。

SparkContext能够连接多种不同类型的cluster manager(如standalone,mesos,yarn),这些cluster manager都是用来分配资源给spark应用程序的。一旦建立连接,spark就会获取到集群节点中的executorexecutor以进程的形式运行在work node上,用来执行计算以及存储数据,因此多个work node就会有多个executordriver program将spark应用程序的代码先交给SparkContext然后再发送给executor。最后,SparkContexttask发送到executor去执行。
spark集群模式的概述(cluster mode overview)_第1张图片
架构中的一些注意事项:

  1. 每一个spark应用程序都会获取属于自己的executors进程,在整个应用程序执行的过程中,executor以多线程的形式执行task。这样有利于应用程序间的隔离,不管从调度层面来讲(每个driver调度属于自己的tasks)还是从executor层面(不同spark应用程序的tasks实际上运行在不同的jvm上)。但是,应用程序间隔离也意味着数据无法在spark应用程序(SparkContext的实例)间传递,除非将数据写到外部存储系统中。
  2. 底层的cluster manager感知不到spark的存在。只要spark能够获取到executor进程(同一个spark应用程序下的executor进程能够相互通信),即使cluster manager属于不同类型(如 mesos,yarn),spark应用程序都能够相对容易地运行起来。
  3. driver program在整个生命周期中都必须监听,接受来自属于自己的executor的连接请求(可以在network config section中的spark.driver.port项进行配置)。因此,driver program必须要保持和其他work node的网络是可以连通的。(这里可能存在跨网段问题?)
  4. 因为集群上的tasks受到driver的调度,所以driver需要够靠近work node运行,在同一个局域网中是最好的。如果想要远程向集群发送请求,那么通过RPC将请求发送给driver,由driver在近work node端提交给我们的操作,比在远work node端运行一个driver来的好一些。

Cluster Manager Types

  • Standalone,附带简单cluster manger的spark,可以轻松设置集群(单机版)
  • Apache Mesos,一个通用的cluster manger,也可以运行Hadoop MapReduce和服务应用程序
  • Hadoop YARN,Hadoop 2.x中的资源管理器
  • Kubernetes,一个开源系统,用于自动化容器化应用程序的部署,扩展和管理。

Submitting Applications

spark可以通过spark-submit脚本将应用程序提交到任何不同类型的集群中。

Monitoring

每个driver program都拥有自己的web UI,端口一般为4040,web包含运行中的tasks,executors,storage usage信息。 通过http://:4040可以访问到。

Job Scheduling

spark可以控制跨应用程序(从cluster manager的层面)的资源分配以及应用程序内(如果有多个计算发生在同一个SparkContext中)的资源分配。

Glossary

术语 含义
Application 用户构建在spark上的程序,在集群中包括一个driver programe和多个executor
Application jar 一个装着用户的spark应用程序的jar包。有时候用户想要创建一个包含spark应用程序及其依赖项的“uber jar”。用户的jar不应该(never)包含Hadoop或Spark库,因为这些库将在运行时添加。
Driver program 是一个进程,用来运行应用程序的main方法,并且创建SparkContext
Cluster manager 是一个外部服务,用来获取集群中的资源(有多种模式)
Deploy mode 用来区分dirver进程运行的位置。在cluster模式中,spark框架在集群内部启动driver;在client模式中,由submitter在集群外部启动driver
Worker node 集群中任何可以运行spark应用程序代码的节点
Executor 一个由spark应用程序创建的,位于worker node上的进程,用来执行task,将数据保存在内存或者磁盘上。每个spark应用程序都有属于自己的多个executor
Task 一个工作单元,会被送往executor去执行
Job 一个由多个task组成的并行计算,通过Spark的action类算子进行触发,可以在driver日志中观察到
Stage 每个job可以被切分成更小的,多个task组成的集合,集合之间相互依赖(类似于mapreduce中的map stage和reduce stage)。可以在driver日志中观察到。

你可能感兴趣的:(Spark)