程序外名词
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上的工作单元;
作者:他与理想国
链接:https://www.jianshu.com/p/e14a09089444