Scala | 宽窄依赖 | 资源调度与任务调度 | 共享变量 | SparkShuffle | 内存管理

本文详细介绍了Spark的宽窄依赖概念,包括窄依赖的一对一或多对一关系,宽依赖的一对多特性及其在数据重新分布中的作用。接着,文章深入探讨了Stage的划分规则和计算模式,以及Spark的资源调度和任务调度流程,包括粗粒度和细粒度资源申请。此外,还讨论了共享变量如广播变量和累加器的使用,以及Spark Shuffle的原理,包括HashShuffle和SortShuffle的优缺点。最后,文章触及Spark内存管理,包括静态和统一内存管理模式。



一、术语解释

在这里插入图片描述

Task的个数 = Paration的个数 = 并行度
job串行,Stage串行加并行,task并行;
app > job > stage > task

二、窄依赖和宽依赖

  RDD 之间有一系列的依赖关系,依赖关系又分为窄依赖宽依赖

1.窄依赖

  父 RDD 和子 RDD partition 之间的关系是一对一的。或者父 RDD 和子 RDDpartition 关系是多对一的。不会有 shuffle 的产生。

shuffle会产生数据重新分布

2.宽依赖

  父 RDD 与子 RDD partition 之间的关系是一对多。会有 shuffle 的产生。

3.宽窄依赖图理解(以WordCount为例)

在这里插入图片描述
在这里插入图片描述

三、Stage详解

  Spark 任务会根据 RDD 之间的依赖关系,形成一个 DAG 有向无环图,DAG会提交给 DAGSchedulerDAGScheduler 会把 DAG 划分相互依赖的多个stage,划分 stage 的依据就是 RDD 之间的宽窄依赖。遇到宽依赖就划分stage,每个 stage 包含一个或多个 task 任务。然后将这些 tasktaskSet的形式提交给 TaskScheduler 运行。stage是由一组并行的 task 组成。

1.stage 切割规则

  切割规则:从后往前,遇到宽依赖就切割 stage
在这里插入图片描述

2.stage 计算模式

  stage 计算模式是pipeline 管道计算模式。pipeline 只是一种计算思想、模式。
在这里插入图片描述
  测试验证 pipeline 计算模式:

package com.shsxt.scalaTest.core.transform_operator

import org.apache.spark.rdd.RDD
import org.apache.spark.{
   
   SparkConf, SparkContext}

object Pipeline_Test {
   
   
  def main(args: Array[String]): Unit = {
   
   
    val conf = new SparkConf()
    conf.setMaster("local").setAppName("pipeline")
    val sc = new SparkContext(conf)

    val rdd: RDD[Int] = sc.parallelize(Array(1, 2, 3))

    val rdd2: RDD[Int] = rdd.map(x => {
   
   
      println("map---------------", x)
      x
    })

    val rdd3: RDD[Boolean] = rdd2.map(x => {
   
   
      println("filter-------------", x)
      true
    })

    rdd3.collect()

    sc.stop()
  }
}
(map---------------,1)
(filter-------------,1)
(map---------------,2)
(filter--------
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

幼稚的人呐

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值