Spark源码解析---Spark执行的架构

来源:互联网 发布:淘宝店家推广 编辑:程序博客网 时间:2024/05/14 07:51

Spark执行的架构

Spark应用程序作为独立的进程运行在集群上,由主程序(称为驱动程序Driver Program)中的SparkContext对象协调。

具体来说,要在集群上运行,SparkContext可以连接到几种类型的集群管理器(Spark自己的standalone cluster manager,Mesos或YARN),它们跨应用程序分配资源。 一旦连接,Spark将收集集群中的节点上的执行程序,这些进程是运行计算和存储应用程序数据的进程。 接下来,它将您的应用程序代码(由JAR或Python文件传递给SparkContext定义)发送给executors。 最后,SparkContext将任务发送给executors运行。

这里写图片描述

有关这种架构有几件有用的事情要注意:

  1、每个应用程序都获得自己的执行程序进程,这些进程在整个应用程序的持续时间内保持不变,并在多线程中运行任务。 这有利于将应用程序彼此隔离,在 scheduling side (每个驱动程序安排其自己的任务)和executor side (来自不同应用程序的任务在不同的JVM中运行)。 但是,这也意味着数据不能在不写入外部存储系统的情况下在不同的Spark应用程序(SparkContext的实例)之间共享。

  2、Spark与底层集群管理器无关。 只要可以获取executor 进程,并且彼此进行通信,即使在也支持其他应用程序(例如Mesos / YARN)的集群管理器上运行它也是比较容易的。

  3、Driver必须在其生命周期中侦听并接收来自executor的传入连接(例如,请参阅网络配置部分中的spark.driver.port)。 因此,驱动程序必须能够从工作节点网络寻址。

  4、因为驱动程序调度集群上的任务,所以它应该靠近工作节点运行,最好在同一个局域网上运行。 如果您想要远程发送请求到集群,最好是向驱动程序打开一个RPC,并从附近提交操作,而不是在远离工作节点的地方运行驱动程序。

Job Scheduling

Overview

  Spark有几个用于在计算之间调度资源的功能。 首先,请记住,如集群模式概述所述,每个Spark应用程序(SparkContext的实例)运行一组独立的执行程序进程。 Spark运行的集群管理器提供了跨应用程序进行调度的功能。 第二,在每个Spark应用程序中,如果不同的线程提交了多个“作业”(Spark操作)可能会同时运行。 如果您的应用程序通过网络提供请求,这是很常见的。 Spark包括一个公平的调度程序来调度每个SparkContext中的资源。

原创粉丝点击