Spark原理与实践|青训营笔记

58 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第五天

大数据技术栈

image.png

大数据处理链路

image.png

开源大数据处理引擎

image.png

spark版本引进

image.png

spark生态特点

统一引擎,支持多种分布式场景 image.png
多语言支持 image.png 可读写丰富数据源 image.png 丰富灵活的API算子 image.png 支持K8S/YARN/Mesos资源调度 image.png

Spark原理解析

SparkCore

image.png

RDD

RDD是弹性分布式数据集, 是分布式内存的一个抽象概念,RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,只能通过在其他RDD执行确定的转换操作(如map、joingroup by)而创建,然而这些限制使得实现容错的开销很低。对开发者而言,RDD可以看作是Spark的一个对象,它本身运行于内存中,如读文件是一个RDD,对文件计算是一个RDD,结果集也是一个RDD ,不同的分片、 数据之间的依赖 、key-value类型的map数据都可以看做RDD。
RDD五要素

image.png

内置RDD

image.png

自定义RDD
    实现五要素对应的函数

RDD算子

两类RDD算子
    Transform算子:生成一个新的RDD
    

image.png

    Action算子:触发Job提交
    
    

image.png

RDD依赖:
    窄依赖:
        父RDD的每个partition至多对应一个子RDD分区
        NarrowDependency
        OneToOneDependency
        RangeDependency
        PruneDependency
    宽依赖:
        父RDD的每个partition都可能对应多个子RDD分区
        ShuffleDependency
    

image.png

image.png

RDD执行流程

image.png

Scheduler层

image.png

Memory Management层

image.png

image.png

Shuffle层

image.png

SortShuffleManager

每个MapTask生成一个Shuffle数据文件和一个index文件,dataFile中的数据按照partitionId进行排序.同一个Partition的数据聚集在一起,indexFile保存了所有ParitionId再dataFile的位置信息,方便后续ReduceTask能Fetch到对应的Partition的数据

image.png

image.png

image.png

Spark原理解析

SparkSQL image.png

Catalyst优化器

image.png

RBO

image.png

image.png

CBO

image.png

AQE

image.png

image.png

image.png

image.png

Runtime Filter

image.png

Bloom RUntime Filter

image.png

Codegen-Expression

image.png

image.png

image.png