Spark 集群模式概览

集群模式概览


此文档简单介绍了Spark如何在集群上应用,并且使得理解涉及到的组件更为容易。

1 组件


Spark应用作为集群上独立的进程集合运行,并且通过主程序(称之为驱动程序)中的SparkContext对象进行调节。

为了在集群上运行,SparkContext连接多种类型的集群管理器(Spark自己的独立集群管理器、Mesos或YARN),集群管理器用于跨应用分配资源。一旦连接,Spark会在集群中获取节点上的执行器,执行器是运行计算任务或存储应用数据的进程。接下来,Spark将应用中的代码(由传递给SparkContext的JAR或Python文件定义)发送给执行器。最后,SparkContext将任务发送给执行器进行执行。
架构

  • 每个应用都获得属于自己的执行器进程,这些进程在应用运行期间保持不变并且在多个线程上执行任务。这样有助于在调度端(每个驱动调度自己的任务)与执行器端(任务来自于不同JVM上的不同的应用)之间隔离应用程序。然而,这也意味着,如果没有将数据写入外部存储系统,数据便不能在不同的Spark应用(SparkContext实例)之间共享。
  • Spark与底层集群管理器无关。只要它能够获取执行器进程,并且这些执行器进程能够互相通信即可,这样即使是在支持其他应用的集群管理器上,运行Spark也相对比较容易。
  • 驱动程序必须在其生命周期内监听并接受来其执行器的传入连接。
  • 由于驱动在集群上调度任务,所以它应该靠近工作节点,最好位于同一局域网中。如果想要向集群发送远程请求,那么最好向驱动程序发起RPC,令此驱动程序就近提交操作,而不是直接远程运行驱动程序。

2 集群管理器类型


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

  • 单机——Spark自带的简单集群管理器,可以轻松设置集群
  • Apache Mesos——常见的集群管理器,还可以运行Hadoop MapReduce与服务应用
  • Hadoop YARN——Hadoop2中的资源管理器
  • Kubernetes——用于自动部署、扩展、管理容器化应用的开源系统
    存在第三方项目(Spark项目并不支持)用于添加对Nomad作为集群管理器的支持。

3 提交应用


可以通过spark-submit脚本将应用提交给任意类型的集群。

4 监控


每个驱动程序都有一个Web界面,通常为4040端口,此界面显式有关运行的任务、执行器以及存储使用的信息。在浏览器中使用http://<driver=mode>:4040即可访问此UI。

5 工作调度


Spark既可以跨应用(集群管理器级别)控制资源分配也可以控制应用内(如果多个计算发生在相同的SparkContext中)资源分配。

6 词汇表


应用(Application):Spark上构建的用户程序。由驱动程序与集群上的执行器构成。

应用jar(Application jar):Jar包含用户的Spark应用。某些情况下,用户可能希望创建包含应用及其相关依赖的“uber jar”。用户的jar不应当包含Hadoop或Spark库,但是,它们会在运行时被添加。

驱动程序(Driver program):执行应用的main()函数并且创建SparkContext的进程。

集群管理器(Cluster manager):获取集群资源的外部服务。

部署模式(Deploy mode):用于区分驱动进程运行的位置。“集群”模式下,框架在集群上启动驱动器。“客户端”模式下,提交者在集群外启动驱动器。

工作节点(Worker node):集群中运行应用代码的节点。

执行器(Executor):工作节点上为运行应用而启动的进程,该进程运行任务并且在内存或磁盘存储上保存数据。每个应用都有属于自己的执行器,

任务(Task):可以发送给单个执行器的工作单位。

工作(Job):由多个任务构成的并行计算,这些任务是为了响应Spark动作(例如,save、collect)而产生。驱动程序的日志中可以看见此术语。

阶段(Stage):每个工作会被划分为更小的任务集合,这些人物被称为阶段,并且互相依赖(类似于MapReduce中的map阶段与reduce阶段)。驱动程序的日志中可以看见此术语。

翻译源:Spark 2.3.2 文档

猜你喜欢

转载自blog.csdn.net/qq_32165041/article/details/83617933
今日推荐