spark集群部署模式概览

spark集群部署模式概览

[原文连接]

元素

一个spark应用包含运行在集群里的一系列进程,它们由主程序(称作driver)里的SparkContext对象协调。

运行图

SparkContext可以连接不同的集群管理器( Spark的 standalone cluster manager/ Mesos/YARN),这层抽象使得spark可以利用不同的底层设施。集群管理器用于分配资源,spark应用的运行流程与其密切相关。在连接到集群管理器之后,spark首先在集群的各节点上获取executor(用来执行结算和存取数据);然后,spark将你的代码(JAR/ Python files /..)发给executor;最后,由SparkContext分配任务给executor执行。

在这个架构中有几点值得注意:

  1. 各应用程序的executor进程是独立的,它们的生命周期为整个应用程序的运行周期,在多线程中运行任务。 这有利于各调度方(每个driver安排自己的任务)和各执行方(不同应用程序的任务运行在不同JVM中)之间彼此隔离。但是,这也意味着在不写入外部存储的情况下,不能跨Spark应用程序(SparkContext的实例)共享数据。
  2. Spark对底层群集管理器是不可见的。只要可以获取executor进程,并且彼此进行通信,即使在也支持其他应用程序(例如Mesos / YARN)的集群管理器上运行spark也很容易。
  3. driver必须在其生命周期中侦听并接收其executors的传入连接(例如,请参阅网络配置部分中的spark.driver.port)。因此,工作节点必须能从网络中寻址到驱动程序。
  4. 因为driver负责调度集群上的任务,所以它应该靠近工作节点运行,最好在一个局域网内。 如果要远程发送请求到集群,最好是向driver发起一个RPC,并让其从附近提交操作,而不是在远离工作节点的位置直接运行驱动程序。

集群管理器分类

目前支持如下几种管理器:

应用提交

使用spark-submit脚本,可以将应用程序提交到一个任意类型的集群中运行,这里是详细文档:[application submission guide]

监控

每个driver都有一个web界面,可以监控其上运行的任务、executors和存储使用情况。具体参见:monitoring guide

任务调度

参考 job scheduling overview

术语

术语 含义
Application Spark应用程序。包括driver程序和集群上的executor
Application jar 一个jar包包含了用户的spark应用。用户jar包中不应该引入Hadoop/spark的库,它们会在运行时被添加
Driver program 运行main()函数并且创建SparkContext的进程
Cluster manager 用来从集群获取资源的外部服务 (例如standalone manager, Mesos, YARN)
Deploy mode 决定driver进程在哪里运行。"cluster" 模式下运行在集群内;"client"模式下,submitter在集群外运行driver
Worker node 集群内可以运行Application的节点
Executor 一个worker节点上运行的负责执行任务和存储数据的进程。每个Application拥有自己的executor
Task 可以发送给executor执行的任务单位
Job 由多个Task组成的并行计算,响应Spark动作(例如save,collect)而产生;driver日志中可以看到此术语
Stage 每个job被分成更小的任务,称为相互依赖的stage(类似于Map、Reduce);driver日志中可以看到此术语

推荐阅读更多精彩内容