• 【Spark | RDD】架构及算子的基本认识


    Spark架构

    运行环境

    在这里插入图片描述

    在这里插入图片描述

    配置高可用(HA)

    所谓的高可用是因为当前集群中的 Master 节点只有一个,所以会存在单点故障问题。所以为了解决单点故障问题,需要在集群中配置多个 Master 节点,一旦处于活动状态的 Master发生故障时,由备用 Master 提供服务,保证作业可以继续执行。这里的高可用一般采用
    Zookeeper 设置。
    在这里插入图片描述

    运行架构

    运行架构

    在这里插入图片描述

    核心组件

    Driver

    Spark 驱动器节点,用于执行 Spark 任务中的 main 方法,负责实际代码的执行工作。
    Driver 在 Spark 作业执行时主要负责:

    • 将用户程序转化为作业(job)
    • 在 Executor 之间调度任务(task)
    • 跟踪 Executor 的执行情况
    • 通过 UI 展示查询运行情况
    Executor

    Spark Executor 是集群中工作节点(Worker)中的一个 JVM 进程,负责在 Spark 作业中运行具体任务(Task),任务彼此之间相互独立。Spark 应用启动时,Executor 节点被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在。如果有 Executor 节点发生了故障或崩溃,Spark 应用也可以继续执行,会将出错节点上的任务调度到其他 Executor 节点上继续运行。
    Executor 有两个核心功能:

    • 负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程
    • 它们通过自身的块管理器(Block Manager)为用户程序中要求缓存的 RDD 提供内存式存储。RDD 是直接缓存在 Executor 进程内的,因此任务可以在运行时充分利用缓存数据加速运算。
    Master & Worker

    Spark 集群的独立部署环境中,不需要依赖其他的资源调度框架,自身就实现了资源调度的功能,所以环境中还有其他两个核心组件:Master 和 Worker,这里的 Master 是一个进程,主要负责资源的调度和分配,并进行集群的监控等职责,类似于 Yarn 环境中的 RM, 而
    Worker 呢,也是进程,一个 Worker 运行在集群中的一台服务器上,由 Master 分配资源对数据进行并行的处理和计算,类似于 Yarn 环境中 NM。

    ApplicationMaster

    Hadoop 用户向 YARN 集群提交应用程序时,提交程序中应该包含 ApplicationMaster,用于向资源调度器申请执行任务的资源容器 Container,运行用户自己的程序任务 job,监控整个任务的执行,跟踪整个任务的状态,处理任务失败等异常情况。
    说的简单点就是,ResourceManager(资源)和 Driver(计算)之间的解耦合靠的就是ApplicationMaster。

    执行原理

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

    RDD 转换算子

    单Value型

    map、mapPartitions、mapPartitionsWithIndex

    Map 算子是分区内一个数据一个数据的执行,类似于串行操作。而 mapPartitions 算子是以分区为单位进行批处理操作。

    groupBy分组

    filter过滤

    sample抽取

    distinct去重

    coalesce、repartition缩减分区数量

    repartition操作内部其实执行的是 coalesce 操作,参数 shuffle 的默认值为 true

    sortBy排序

    双 Value 类型

    intersection求交集

    subtract求差集

    zip以键值对的形式进行合并

    Key - Value 类型

    partitionBy

    将数据按照指定 Partitioner 重新进行分区

    reduceByKey

    数据按照相同的 Key 对 Value 进行聚合

    groupByKey

    将数据源的数据根据 key 对 value 进行分组

    aggregateByKey

    将数据根据不同的规则进行分区内计算和分区间计算

    foldByKey

    当分区内计算规则和分区间计算规则相同时,aggregateByKey 就可以简化为 foldByKey

    combineByKey

    最通用的对 key-value 型 rdd 进行聚集操作的聚集函数(aggregation function)

    sortByKey

    在一个(K,V)的 RDD 上调用,K 必须实现 Ordered 接口(特质),返回一个按照 key 进行排序

    join

    在类型为(K,V)和(K,W)的 RDD 上调用,返回一个相同 key 对应的所有元素连接在一起的(K,(V,W))的 RDD

    leftOuterJoin 类似于 SQL 语句的左外连接

    cogroup

    在类型为(K,V)和(K,W)的 RDD 上调用,返回一个(K,(Iterable,Iterable))类型的 RDD

    RDD 行动算子

    reduce

    聚集 RDD 中的所有元素,先聚合分区内数据,再聚合分区间数据

    collect

    在驱动程序中,以数组 Array 的形式返回数据集的所有元素

    count个数

    first取第一个元素

    take返回一个由 RDD 的前 n 个元素组成的数组

    takeOrdered返回该 RDD 排序后的前 n 个元素组成的数组

    aggregate

    分区的数据通过初始值和分区内的数据进行聚合,然后再和初始值进行分区间的数据聚合

    fold 折叠操作,aggregate 的简化版操作

    countByKey

    save 将数据保存到不同格式的文件中

    def saveAsTextFile(path: String): Unit
    def saveAsObjectFile(path: String): Unit
    def saveAsSequenceFile(
    path: String,
    codec: Option[Class[_ <: CompressionCodec]] = None): Unit

    foreach 分布式遍历 RDD 中的每一个元素,调用指定函数

    RDD 序列化

    • 闭包检查
    • 序列化方法和属性
    • Kryo 序列化框架

    RDD 依赖关系

    • RDD 血缘关系:将创建 RDD 的一系列 Lineage(血统)记录下来,以便恢复丢失的分区
    • RDD 依赖关系:两个相邻 RDD 之间的关系
    • RDD 窄依赖:窄依赖表示每一个父(上游)RDD 的 Partition 最多被子(下游)RDD 的一个 Partition 使用。窄依赖我们形象的比喻为独生子女。
    • RDD 宽依赖: 宽依赖表示同一个父(上游)RDD 的 Partition 被多个子(下游)RDD 的 Partition 依赖,引起 Shuffle,总结:宽依赖我们形象的比喻为多生。
    • RDD 阶段划分:DAG(Directed Acyclic Graph)有向无环图是由点和线组成的拓扑图形,该图形具有方向,
      不会闭环。
    • RDD 阶段划分源码
    • RDD 任务划分:RDD 任务切分中间分为:Application、Job、Stage 和 Task
    • RDD 任务划分源码

    RDD 持久化

    • RDD Cache 缓存
    • RDD CheckPoint 检查点:所谓的检查点其实就是通过将 RDD 中间结果写入磁盘
    • 缓存和检查点区别
      1)Cache 缓存只是将数据保存起来,不切断血缘依赖。Checkpoint 检查点切断血缘依赖。
      2)Cache 缓存的数据通常存储在磁盘、内存等地方,可靠性低。Checkpoint 的数据通常存
      储在 HDFS 等容错、高可用的文件系统,可靠性高。
      3)建议对 checkpoint()的 RDD 使用 Cache 缓存,这样 checkpoint 的 job 只需从 Cache 缓存
      中读取数据即可,否则需要再从头计算一次 RDD

    RDD 分区器

    • Hash 分区:对于给定的 key,计算其 hashCode,并除以分区个数取余
    • Range 分区:将一定范围内的数据映射到一个分区中,尽量保证每个分区数据均匀,而且分区间有序

    RDD 文件读取与保存

    • text 文件
    • sequence 文件
    • object 对象文件
  • 相关阅读:
    一些封装好、使用度高的Api(JavaScript)
    DataTable导出Excel
    护眼灯值不值得买?显色指数最好的护眼灯推荐
    【已验证-直接用】微信小程序wx.request请求服务器json数据并渲染到页面
    短链接推荐:一个可以监测用户行为的“营销神器”
    ES6笔记————let,箭头函数,剩余参数
    ADSP-21479的开发详解五(AD1939 C Block-Based Talkthru 48 or 96 kHz)音频直通
    关系数据库是如何工作的
    强网杯2022——WEB
    4. css资源加载 loader 解析器
  • 原文地址:https://blog.csdn.net/pingyufeng/article/details/127662173