Spark集群模式概览

本文介绍了Spark如何在集群中运行,并详细解释了驱动程序、集群管理器、executor等关键组件的作用。此外,还概述了三种集群管理器:Standalone、Mesos和YARN,并提供了应用程序提交流程、性能监控和工作调度的相关信息。

Spark集群模式概览

本文讲解Spark如何运行于集群之上,对其中相关的组件进行介绍。

组件(Components)

Spark应用主程序通过引用SparkContext对象,以进程的独立集合的形式运行于集群上。该主程序被称为驱动程序(driver program)。

具体地说,在集群上运行的时候,SparkContext对象可以连接多种集群管理器(cluster managers)用以协调分配资源,其中包括Spark自身(standalone)的集群管理器、Mesos和YARN。一旦连接到集群管理器,Spark将请求获取集群中各个节点上的executor,executor是为程序执行计算和存储数据的进程。紧接着,(SparkContext以JAR或Python文件的形式)将应用程序代码传送给executor。最后,SparkContext在executor中发起任务(task)用以执行应用代码。

 cluster-overview

上述架构图中有几点有用的信息需要指出:

  1. 每个应用程序请求获取到的executor进程会伴随着应用程序的生命周期一直存在,task是以多线程的方式在executor进程中执行。这有利于应用程序在调度端(每个驱动调度自身的tasks)和executor端(来自不同应用的tasks运行于不同的JVM中)都可以彼此隔离。然而,这也意味着不同的Spark应用程序(SparkContext实例)不能共享数据,除非将这些数据写入外部存储系统。
  2. Spark对于集群管理器(cluster manager)并不可知。只要SparkContext可以获取到executor进程并与这些进程进行交互。这样的话,也可以很轻易地将集群管理器(cluster manager)替换为支持其他应用的集群管理器,例如Mesos或YARN。
  3. 驱动程序(driver program)在它的生命周期内必须监听并接收来自于executors的连接。因此,驱动程序(driver program)对于工作节点(work nodes)必须是网络可寻址的(network addressable)。
  4. 在集群中,由于驱动(driver)调度任务(tasks),所以驱动应尽量靠近工作节点,最好两者可以处于同一个局域网内。如果你想要向远程集群发送请求,最好是让驱动(driver)以RPC的方式执行近端提交操作,而不是在远程工作节点上运行驱动(driver)。

集群管理器类型(Cluster Manager Types)

Spark现在支持3种集群管理器:

  • Standalone — 一个Spark自带的简易集群管理器,主要目的是可以方便地建立一个Spark集群;
  • Apache Mesos — 一个通用的集群管理器,同样也适用于Hadoop MapReduce和其他计算应用模型;
  • Hadoop YARN — Hadoop 2.0引入的资源管理器。

提交应用程序(Submitting Applications)

可以使用spark-submit脚本将应用程序(application)提交给一个集群。

性能监控(Monitoring)

驱动程序(driver program)提供一个Web UI来展示运行的tasks、executors和存储使用情况(storage usage)。可以通过http://<driver-node>:4040访问这个UI进行查看。

工作调度(Job Scheduling)

Spark不仅控制跨应用(集群管理器这一级别)的资源调配,还控制着应用内部(SparkContext上的多重计算)的资源调配。

术语(Glossary)

下表总结了一些集群中常用到的术语:

TermMeaning
ApplicationSpark集群上构建的用户程序,包括一个驱动程序(driver program)和多个executor
Application jarSpark用户程序打包后的JAR文件。在某些情况下,用户会创建一个包含应用以及其依赖的“uber jar”。用户提供的JAR文件不需要包含Hadoop或Spark的库文件,这些库文件会在运行时自动加上。
Driver program运行应用main()方法并创建SparkContext的进程
Cluster manager调配集群资源的外部服务(例如:standalone manager、Mesos、YARN)
Deploy mode区别在于是谁发起驱动进程。在cluster模式下,框架在集群内部发起驱动进程;在client模式下,程序提交者在集群外部发起驱动进程。
Worker node可以运行应用代码的任何集群节点。
Executor在worker node上为应用启动的一个进程,可以执行tasks,并将数据保存在内存或硬盘上。每个application有自己的一组executors。
Task一个executor中的工作单元。
Job由多个tasks构成的并行计算,在Spark action(例如:save,collect)被调用执行时被孵化启动。
Stage每个job被切分成许多小的任务集,这些任务集之间有所依赖(就像MapReduce中的map阶段和reduce阶段),这些任务集就被称作stage。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值