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

200 阅读5分钟

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

本节课的内容主要分为四个部分:

  • 大数据处理引擎Spark介绍
  • SparkCore原理解析
  • SparkSql原理解析
  • 业内挑战与实践

大数据引擎Spark介绍

Spark生态和特点

image.png

Spark生态组件:

  • Spark Core:Spark核心组件,它实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。
  • Spark SQL:用来操作结构化数据的核心组件,通过Spark SQL可以直接查询Hive、HBase等多种外部数据源中的数据。
  • Spark Structured Streaming:Spark提供的流式计算框架,支持高吞吐量、可容错处理的实时流式数据处理。
  • MLlib:Spark提供的关于机器学习功能的算法程序库,包括分类、回归、聚类、协同过滤算法等,还提供了模型评估、数据导入等额外的功能。
  • GraphX:Spark提供的分布式图处理框架,拥有对图计算和图挖掘算法的API接口以及丰富的功能和运算符。
  • 独立调度器、Yarn、Mesos、Kubernetes:Spark框架可以高效地在一个到数千个节点之间伸缩计算,集群管理器则主要负责各个节点的资源管理工作,为了实现这样的要求,同时获得最大灵活性,Spark支持在各种集群管理器(Cluster Manager)上运行。

Spark特点:
多语言支持、丰富数据源、丰富的API/算子

Spark运行框架和部署框架

image.png

  • Application(应用):Spark上运行的应用。Application中包含了一个驱动器(Driver)进程和集群上的多个执行器(Executor)进程。
  • Driver Program(驱动器):运行main()方法并创建SparkContext的进程。
  • Cluster Manager(集群管理器):用于在集群上申请资源的外部服务(如:独立部署的集群管理器、Mesos或者Yarn)。
  • Worker Node(工作节点):集群上运行应用程序代码的任意一个节点。
  • Executor(执行器):在集群工作节点上为某个应用启动的工作进程,该进程负责运行计算任务,并为应用程序存储数据。
  • Task(任务):执行器的工作单元。
  • Job(作业):一个并行计算作业,由一组任务(Task)组成,并由Spark的行动(Action)算子(如:save、collect)触发启动。
  • Stage(阶段):每个Job可以划分为更小的Task集合,每组任务被称为Stage。
Spark目前支持几个集群管理器
  • Standalone :Spark 附带的简单集群管理器,可以轻松设置集群。
  • Apache Mesos:通用集群管理器,也可以运行 Hadoop MapReduce 和服务应用程序。(已弃用)
  • Hadoop YARN: Hadoop 2 和 3 中的资源管理器。
  • Kubernetes:用于自动部署、扩展和管理容器化应用程序的开源系统。

SparkCore原理解析

image.png

相关概念介绍:

  • RDD(Resilient Distributed Dataset):弹性分布式数据集,是一个容错的、并行的数据结构
  • RDD算子:对任何函数进行某一项操作都可以认为是一个算子,RDD算子是RDD的成员函数
  • Transform(转换)算子: 根据已有RDD创建新的RDD
  • Action(动作)算子: 将在数据集上运行计算后的数值返回到驱动程序,从而触发真正的计算
  • DAG(Directed Acyclic Graph): 有向无环图,Spark中的RDD通过一系列的转换算子操作和行动算子操作形成了一个DAG
  • DAGScheduler:将作业的DAG划分成不同的Stage,每个Stage都是TaskSet任务集合,并以TaskSet为单位提交给TaskScheduler。
  • TaskScheduler:通过TaskSetManager管理Task,并通过集群中的资源管理器(Standalone模式下是Master,Yarn模式下是ResourceManager)把Task发给集群中Worker的Executor
  • Shuffle:Spark中数据重分发的一种机制。
如何创建RDD

image.png

RDD算子

image.png

RDD依赖

image.png

RDD执行流程

image.png

Memory Management

image.png

Shuffle

image.png

SparkSql原理解析

image.png

SparkSql执行过程:

  • Unresolved Logical Plan:未解析的逻辑计划,仅仅是数据结构,不包含任何数据信息。
  • Logical Plan:解析后的逻辑计划,节点中绑定了各种优化信息。
  • Optimized Logical Plan:优化后的逻辑计划
  • Physical Plans:物理计划列表
  • Selected Physical Plan 从列表中按照一定的策略选取最优的物理计划

相关概念:

  • DataFrame: 是一种以RDD为基础的分布式数据集, 被称为SchemaRDD
  • Catalyst:SparkSQL核心模块,主要是对执行过程中的执行计划进行处理和优化
  • DataSource:SparkSQL支持通过 DataFrame 接口对各种数据源进行操作。
  • Adaptive Query Execution:自适应查询执行
  • Runtime Filter:运行时过滤
  • Codegen:生成程序代码的技术或系统,可以在运行时环境中独立于生成器系统使用
Catalyst优化-RBO

image.png

image.png

AQE

image.png

image.png

image.png

image.png

Runtime Filter

image.png

Codegen

image.png

image.png

image.png

业界挑战与实践

  • 向量化(vectorization):将循环转换为向量操作的编译器优化
  • 代码生成(Codegen:Code generation):生成程序代码的技术或系统,可以在运行时环境中独立于生成器系统使用

个人总结

通过本节课的学习,我大致了解了Spark引擎的生态组件以及运行框架和工作原理,以及SparkCore、SparkSql的原理,并且知道了Spark未来在业内可能会遇到的挑战与实践。