Spark基础 | 在集群上运行Spark

1 Spark运行时架构

这里写图片描述
术语:
驱动器(Driver)节点:负责中央协调的节点
执行器(executor)节点:与之对应的工作节点
Spark应用(application):驱动器节点和所有执行器节点这个整体
- - - Application = Driver(驱动程序) + Executor(执行程序)
集群管理器(Cluster Manager):在集群中的机器上启动的外部服务

1.1 驱动器节点

作用

  1. 把用户进程转换为任务

    Spark驱动器程序负责把用户程序转为多个物理执行单元,这些单元称为任务(task)

    所有Spark程序都遵循同样的结构:程序从输入数据创建一系列RDD,再使用转化操作派生出新的RDD,再使用转化操作派生出新的RDD,最后使用行动操作收集或存储结果RDD中的数据。
    Spark程序其实是隐式地创建出了一个由操作组成的逻辑上的有向无环图(Directed Acyclic Graph)

    对逻辑执行计划做一些优化,比如将连续的映射转为流水线化执行,将多个步骤合并为一个步骤中。这样Spark把逻辑计划转为一系列步骤(stage)

  2. 为执行器节点调度任务

    执行器进程启动后,会向驱动器进程注册自己。

    Spark驱动器进程会根据当前的执行器节点集合,尝试把所有任务基于数据所在位置分配给合适的执行器进程。当任务执行时,执行器进程会把缓存数据存储起来,而驱动器进程同样会根据这些缓存数据的位置,并且利用这些位置信息调度以后的任务,以尽量减少数据的网络传输

1.2 执行器节点

Spark执行器节点是一种工作进程

生命周期】Spark应用启动时,执行器节点就被同时启动,并且始终伴随着整个Spark应用的生命周期而存在。执行器节点的异常和崩溃,并不会导致应用的停止

作用

  1. 负责运行组成Spark应用的任务,并将结果返回给驱动器进程
  2. 通过自身的块管理器(Block Manager)为用户程序中要求缓存的RDD提供内存式存储

1.3 集群管理器

Spark依赖于集群管理器来启动执行器节点,而在某些特殊情况下,也依赖集群管理器来启动驱动器节点。

集群管理器是Spark中的可拔插式组件

除了自带的独立集群管理器,也可运行在外部集群管理器上,比如YARN Mesos

2 运行Spark应用的详细过程

驱动管理器就是给战略的大boss,资源管理器就是负责执行的组长,执行器就是具体落实的小兵

(1)用户通过spark-submit脚本提交应用

(2)spark-submit脚本启动驱动程序,调用用户定义的main()方法

(3)驱动器程序与集群管理器通信,申请资源以启动执行器节点

(4)集群管理器为驱动器程序启动

(5)驱动器进程执行用户应用中的操作。根据程序中所定义的Pair RDD的转化操作和行动操作,驱动器节点把工作以任务的形式发送到执行器进程

(6)任务在执行器程序中进行计算并保存结果

(7)如果驱动器程序的main( )方法退出,或者调用了SparkContext.stop( ),驱动器程序会终止执行器,并且通过集群管理器释放资源

使用spark-submit部署应用

这一部分很有必要了解一下

 bin/spark-submit [options]  < app jar | python file> [app option] 

没有其他参数,那么spark程序只会在本地执行

–master标记指定要连接的集群URL

描述
spark://host:post 连接到指定端口的spark独立集群,默认窗口7077
yarn 当在YARN上运行时,需要设置环境变量HADOOP_CONF_DIR指向hadoop配置目录,获取集群信息
local 运行本地模式,使用单核
local[N] 运行本地模式,使用N核
local[*] 运行本地模式,使用尽可能多核
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页