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

本文深入解析了Spark计算框架的核心概念,包括Application、Job、DAG、Stage、Task、TaskSet、RDD、dependency和Shuffle。详细阐述了这些概念在Spark执行流程中的作用和相互关系,帮助读者理解Spark的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、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中
北京小辉微信公众号

在这里插入图片描述

大数据资料分享请关注
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辉哥大数据

你的鼓舞将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值