Spark深入解读(一)---- 基本概念

目录

一、Application

二、Job

三、DAG

四、Stage

五、Task

六、TaskSet

七、RDD

八、dependency

九、Shuffle



一、Application

  1. 使用SparkSubmit提交的个计算应用
  2. 一个Application中可以触发多次Action,触发一次Action形成一个DAG,一个DAG对应一个Job
  3. 一个Application中可以有一到多个Job

二、Job

  1. Driver向Executor提交的作业
  2. 触发一次Acition形成一个完整的DAG
  3. 一个DAG对应一个Job
  4. 一个Job中有多个Stage,一个Stage中有多个Task

三、DAG

  1. 概念:有向无环图
  2. 是对多个RDD转换过程和依赖关系的描述
  3. 触发Action就会形成一个完整的DAG,一个DAG就是一个Job

四、Stage

  1. 概念:任务执行阶段
  2. Stage执行是有先后顺序的,先执行前的,在执行后面的
  3. 一个Stage对应一个TaskSet
  4. 一个TaskSet中的Task的数量取决于Stage中最后一个RDD分区的数量

五、Task

1. 概念:Spark中任务最小的执行单元
2. Task分类两种

  • 2-1) ShuffleMapTask:
    • 2-1-1)可以读取各种数据源的读数据;
    • 2-1-2)也可以读取shuffle后的数据;
    • 3-1-3)专门为shuffle做准备
  • 2-2) ResultTask:
    • 2-2-1)可以读取各种数据源的读数据;
    • 2-2-2)也可以读取shuffle后的数据;
    • 2-2-3)专门为了产生计算结果

3. Task其实就是类的实例

  • 有属性:从哪里读取数据
  • 有方法:如何计算

4. Task的数量决定决定并行,同时也要考虑可用的cores

六、TaskSet

  1. 保存同一种计算逻辑多个Task的集合
  2. 一个TaskSet中的Task计算逻辑都一样,计算的数据不一样

七、RDD

1. 概念:分布式、弹性、可容错的抽象数据集
2. 特点

  • 2-1) 有多个分区,分区数量决定任务并行数

    • 2-1-1) 从HDFS中读取:

      • 如果是从HDFS中读取数据,分区的数量由hdfs中数据的输入切片数量决定;
      • sc.textFile可以指定rdd的分区数量;
      • sc.textFile最小的分区数量为2 ;
      • 如果一个大文件,一个小文件,大文件大于小文件的1.1倍,大文件会有2个输入切片 ;
      • 当分区的数量大于切片的数量,多个Task可以读取一个输入切片;当分区的数量小于切片的而数量,RDD分区的数量由切切数量决定:
    • 2-1-2) 将Driver端集合并行化成RDD

      • RDD默认分区的数量由total-executor-cores决定
      • 可以在sc.parallelize(arr, 6)指定分区的数量
  • 2-2) 一个功能函数作用在分区上,函数决定计算逻辑

  • 2-3) RDD和RDD存在依赖关系,可以根据依赖关系恢复失败的任务和划分Stage

  • 2-4) 如果要发生Shuffle,要使用分区器,默认使用HashPartitioner,分区器决定数据到下游哪个分区

  • 2-5) 最优位置,即将Executor调度到数据所在的节点上,要求Worker和DataNode部署在同一节点或OnYarn,通过访问NameNode获取数据块位置信息

3. 到底什么是RDD

  • 是一个抽象数据集,RDD中不保存要计算的数据,保存的是元数据,即数据的描述信息和运算逻辑,比如数据要从哪里读取,怎么运算等
  • RDD可以认为是一个代理,你对RDD进行操作,相当于在Driver端先是记录下计算的描述信息,然后生成Task,将Task调度到Executor端才执行真正的计算逻辑

八、dependency

  1. 概念:依赖关系,指的是父RDD和子RDD之间的依赖关系
  2. 窄依赖:没有shfuffle产生,多个算子会被合并到一个Task中,即在一个pipeline中
  3. 宽依赖:有shuffle产生,是划分Stage的依据

九、Shuffle

  1. 概念:需要通过网络将数据传输到多台机器,数据被打散,但是有网络传输,不一定就有shuffle
  2. 上游RDD的一个分区将数据给了下游RDD的多个分区,即是shuffle,需要注意的是,shuffle过程是下游的Task到上游拉取数据,不是上游Task发送给下游的
  3. Shuffle的功能是将具相一定规律的数据按照指定的分区器的分区规则,通过网络,传输到指定地一台机器的一个分区中即Task中
发布了428 篇原创文章 · 获赞 539 · 访问量 128万+

猜你喜欢

转载自blog.csdn.net/silentwolfyh/article/details/104452636