Spark 名词解释

程序外名词

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上的工作单元;

你可能感兴趣的:(Spark 名词解释)