Spark 名词解释
2018-08-25 本文已影响0人
他与理想国
程序外名词
Application:应用程序
- 应用程序就是用户编写的代码打包之后的jar包和相关的依赖
- Application = Driver + Executor(分布在集群中多个节点)
- Driver部分的代码:SparkConf+SparkContext
- Executor部分的代码:textFile, flatMap, map 具体的业务逻辑
Driver:驱动程序
- Driver是应用程序运行时候的核心,因为它附着了整个作业的调度,并且会向master申请资源来完成具体作业的功能
- Driver是驱动Executor工作的,Executor是具体并发的处理数据分片
- driver频繁和executor通信,所以要在同一个网段中
- 不要用IDE作为Driver,因为可能会出现个中各样的问题
- 运行Application的main函数并创建SparkContext的环境对象
- 创建SparkContext的目的是为了准备Spark应用程序的运行环境,在Spark中有SparkContext负责与ClusterManager通信,进行资源申请、任务的分配和监控等,当Executor部分运行完毕后,Driver同时负责将SparkContext关闭,通常用SparkContext代表Driver
- 除此之外,还向master注册当前应用程序,master会给它分配资源,下一步根据Action触发的job,job里面有一些列的RDD,然后从后往前推,发现如果是宽依赖的话,就划分成不同的stage,将Stage提交给底层调度器TaskScheduler,TaskScheduler拿到这个任务的集合(一个stage的内部都是完全计算逻辑一样的任务,只不过是算的数据不一样),最后根据任务情况把任务给Executor去执行,Executor如果出问题会向Driver进行汇报,运行完毕后SparkContext关闭
Deploy mode:应用程序部署模式
- 区分 driver 进程在何处运行.
- 在 “cluster” 模式下, 框架在集群内部运行 driver.
- 在 “client” 模式下, 提交者在集群外部运行 driver.
- 举荐使用
Cluster Manager:集群管理器
- 获取资源的外部程序
- 为每个spark application,在集群中调度和分配资源的组件,比如Spark Standalone、YARN、Mesos等
- 在standalone模式中即为Master主节点,控制整个集群,监控worker。
- Spark Application的运行不依赖于Cluster Manager
- 分配资源由以下内容决定:
- 1.spark-env.sh和spark-default.sh
- 2.spark-submit提交的参数
- 3.程序中SparkConf配置的参数
Worker:工作节点
- 集群中任何可以运行Application代码的节点
- 在Standalone模式中指的是通过slave文件配置的Worker节点,在Spark on Yarn模式下就是NoteManager节点
- 1个worker只为当前应用程序开启一个Exetuor,但是可以给不同的应用程序开启多个不同的Exetuor
- Worker上不运行程序代码,Worker管理当前Node资源使用情况,会接收Master分配资源(计算内存)的指令,并通过ExecutorRunner来启动新的进程来开启Executor
- Worker不会发机器资源信息给Master,在Master分配资源给Driver之时已经知道了,因为所有的资源都是master分配的,master肯定知道了,只要在worker发生故障的时候才会发送当前资源情况
Executor:执行者
- 在 worker node 上 application 启动的一个进程, 该进程运行 task 并在内存或磁盘上保存数据.
每个 application 都有其独有的 executor. - executor是运行在work所在的节点上为当前应用程序而开启的,进程里面的对象,这个对象负责了具体task的运行
- 如何负责:通过线程池并发执行、和线程复用的方式,每个线程可以运行一个任务,任务完成之后这个线程被回收到线程池当中进行线程复用
- hadoop mapreduce不能复用jvm,spark在一个节点上默认情况下为我们当前程序开启1个jvm进程,这个jvm进程里面是线程池的方式,通过线程来处理task任务,task从磁盘或者内存来读写数据
程序内名词
Spark Context
- 是我们通往集群唯一通道,是开发者使用集群各种功能唯一通道,是整个程序运行、调度的核心(不是指资源调度),里面存在高层调度器、底层调度器、SchedulerBackEnd
- 高等调度器(DAGScheduler):把整个作业划分成了几个小的阶段
- 底层调度器(TaskScheduler):每个阶段里的任务具体怎么处理
job:作业
- 包含一系列Task的并行计算,在spark中一般有Action触发就会触发一个job,Action不会产生RDD
- 一个Application里面可以有多个jobs(不同的action),一般一个action对应一个job,checkpoint也会导致job
Stage:阶段
- 每个job被分解为多个stage,每个stage其实就是一些task的集合, 这些stage 之间相互依赖
- 与 MapReduce 中的 map 与 reduce stage 类似
- Stage内部计算逻辑完全一样,只是计算的数据不同罢了,这就是分布式并行计算
Task:任务
- 被TaskScheduler序列化之后送到某个executor上的工作单元;