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

66 阅读2分钟

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

一. Spark介绍

spark一种通用的统一的计算引擎(General Unified Engine)

特点:

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

二.SparkCore

image.png

2.1 什么是RDD

2.1.1 RDD定义

RDD是Spark中的数据抽象,意思是弹性分布式数据集。在逻辑上是一个数据集,在物理上则可以分块(partition)分布在不同的机器上并发运行(parallel)。RDD的数据具有不可变性(immutable)。 image.png

        如图,一个逻辑RDD在物理上分块存储在不同的服务器

2.1.2 如何创建RDD

  • 内置RDD
    • ShuffleRDD/HadoopRDD/JDBCRDD/KafukaRDD/...
  • 自定义RDD

2.1.3 RDD算子

  • Transform算子:生成一个新的RDD
    • map/filter/flatMap/groupByKey/reduceBuKey/...
  • Action算子:触发job提交
    • collet/count/take/saveAsTextFile/...

在Spark程序中,首先要读取或创建RDD, 然后对数据进行一系列的变换操作(Transform),保存中间结果(Cache),最后对变换结果进行处理(Action)

2.1.4 RDD依赖

RDD依赖:描述父子RDD之间的依赖关系

  • 窄依赖:父RDD的每个partition至多对应一个子RDD分区
  • 宽依赖:父RDD的每个partition都可能对应多个子RDD分区 image.png

2.1.5 RDD执行流程

image.png RDD在Spark]中运行,主要分为以下三步:

  1. 创建RDD对象
  2. DAG scheduler模块介入运算,计算RDD之间的依赖关系,形成DAG
  3. 每一个Job被划分为多个stage,划分stage的一个主要依据是当前计算因子的输入是否确定,如果确定将其分在同一个stage,避免多个stage之间的消息传递开销 image.png

执行过程:

  1. 用户程序创建SparkContext后,它会连接到集群资源管理器(Cluster Manager),集群资源管理器会为用户分配计算资源,并启动Executor
  2. Driver将计算程序划分为不同的执行阶段和多个task,之后将task发送给Executor
  3. Executor负责执行task,并将执行状态汇报给Driver,同时也会将当前节点资源的使用情况汇报给集群资源管理器

2.2 内存管理

image.png

  • Executor的内存主要有两类:Storge,Execution
  • Unified Memory Manager统一管理Execution/Storge的内存
    • Unified Memory Manager统一管理多个并发Task的内存分配 image.png
  • Storge和Execution的内存的使用是动态调整的,可以互相借用