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

186 阅读1分钟

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

1. 大数据处理引擎Spark介绍

1.1 什么是Spark?

Apache Spark™ is a multi-language engine for executing data engineering, data science, and machine learning on single-node machines or clusters.

1.2 Spark生态&特点

image.png

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

1.3 Spark运行结构 & 部署方式

image.png

  • Spark Local Mode
    • 本地测试/单进程多线程模式
    • spark-sql --master local[*]
  • Spark Standalone Mode
    • 需要启动Spark的Standalone集群的Master/Worker
    • spark-sql --master spark://masterip:{master_ip}:{port}...
  • ON YARN/K8S
    • 依赖外部资源调度(YARN/K8S)
    • spark-sql --master yarn...
    • spark-sql --master k8s://https://<k8s-apiserver-host.....

1.4 提交一个简单的任务

  • SparkPi scala 代码

image.png

  • 编译成jar包后,使用spark-submit提交

image.png

  • result

image.png

2. 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中数据重分发的一种机制

3. SparkSQL原理解析

image.png

DataFrame: 是一种以RDD为基础的分布式数据集, 被称为SchemaRDD

Catalyst:SparkSQL核心模块,主要是对执行过程中的执行计划进行处理和优化

DataSource:SparkSQL支持通过 DataFrame 接口对各种数据源进行操作。

Adaptive Query Execution:自适应查询执行

Runtime Filter:运行时过滤

Codegen:生成程序代码的技术或系统,可以在运行时环境中独立于生成器系统使用

3.1 SparkSQL执行流程

image.png SparkSql执行过程:

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