Cluster Mode 概述

来源:互联网 发布:飞鸽网络打印 编辑:程序博客网 时间:2024/06/06 15:02

集群模式概述 【原文 Cluster Mode Overview】

本文简要介绍spark如何在集群上运行,旨在让大家更好地理解spark相关的组件。至于如何提交spark 应用程序到集群上,参见 application submission

术语说明

时间 说明 Application 应用程序。用户基于Spark编写的程序,由一个driver程序 与若干个executor构成 Application jar 由 Application打成的压缩包。jar包可能包含应用程序本身及相关的依赖包(Hadoop与Spark的依赖包就不要打到jar中啦,因为集群上已有) Driver program 应用程序执行的入口进程-就是执行main函数的那个进程,该进程会创建 SparkContext 对象 Cluster manager 集群资源管理组件,负责管理与分配计算资源给应用程序。常见的集群资源管理组件有statndalone manager,Mesos,YARN Deploy mode 部署模式,不同的部署模式,driver 进程执行地点不同:1)cluster模式:driver作为集群的一员,由框架自身启动 2)client模式:driver由应用程序提交者启动 Worker node 集群中能执行应用程序的节点 Executor 集群的计算资源,Worker节点上为应用程序而生的进程。Exucutor负责执行任务并将相关的数据保存到内存或者磁盘中。每个应用程序都有自己的 Executors。 Task 任务。作业(job)的组成单元,一个 task 会被发送到一个executor上执行。 Job 作业。Action类算子(比如save,collect)触发Job的执行:多个Task并行执行。driver 的日志描述中用到了该词语。 Stage 阶段。Job由多个stages组成,每个stage由一系列task组成,stage与stage之间相互依赖。driver 的日志描述中用到了该词语。

组 件

spark应用程序作为独立的进程在集群中运行。主程序(就是driver program啦) 中的SparkContext对象负责各应用程序之间的协调。
集群模式时,spark各核心组件依赖过程如下:

这里写图片描述

spark相关组件概要

如上图,SparkContext可以连接到不同类型的 cluster manager, 建立连接后,SparkContext做了三件事:

  1. 获取集群节点中的计算资源 executors,即执行代码与存储数据的一组进程。
  2. 发送应用程序代码(就是你提交的jar包或者Python文件啦)给exectors。
  3. 将 tasks 发送到executors上执行。

说 明

  • executors为应用程序所独享。这的做: 1)好处。无论是在 scheduler 端 还是 executor 端,都可以做到隔离各应用程序:scheduler 端,driver 调度自己的任务;executor端,不同应用程序对应的task在不同的JVM上执行。
    2)坏处。各应用程序不能直接共享数据,触发把数据写入到第三方的存储系统。

  • spark对底层的 cluster manager 不可见。

  • driver程序的整个生命周期里必须一直监听与接收可能的来自executor的连接建立请求。因此,必须保证driver程序与各worker节点网络互通。
  • 由于driver程序负责调度task到各worker节点执行,考虑到网络开销等,driver与各worker节点最好在同一局域网。如果你要远程提交作业,最好先通过 RPC 与 driver建立连接,然后让 与worker节点距离较近的driver 提交,而不是直接启动一个driver,远程提交作业。

Cluster Manager 类型

  • Standalone
    只包含 Spark计算组件的集群管理系统。
  • Apache Mesos
    通用的可以运行Hadoop MapReduce与服务程序的集群资源管理系统。
  • Hadoop YARN
    Hadoop2中的资源管理系统。
  • Kubernetes
    对kubernets的支持正在如火如荼的进行中,目前处于实验阶段。更多的文档,参加Kubernetes项目README文件。

提交应用程序

通过spark-submit脚本,我们可以提交应用程序到任意类型的cluster manager上。详见 application submission说明

监控

driver程序都有自己的 web UI,一般来说端口号是 4040。访问 http://<driver-node>:4040 就可以获取正在执行的tasks、executors与存储空间使用状况。更多的监控说明,详见 monitoring说明

作业调度

spark是如何完成 夸应用程序(clustar manager级别的)以及应用程序自身资源分配的控制呢?详见 job scheduling 概况