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

111 阅读3分钟

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

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

大数据处理引擎Spark介绍

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特点

  1. 多语言支持:支持SQL、JAVA/Scale、Python、R等语言进行开发。
  2. 丰富的数据源:内置DataSource包括Text、Parquet/ORC、JSON/CSV、JDBC,还可以自定义DataSource。
  3. 丰富的API/算子 image.png

SparkSQL

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

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

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

Adaptive Query Execution:自适应查询执行

Runtime Filter:运行时过滤

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

SparkSql执行过程:

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

Spark运行架构和工作原理

image.png Spark应用在集群上运行时,包括了多个独立的进程,这些进程之间通过驱动程序(Driver Program)中的SparkContext对象进行协调,SparkContext对象能够与多种集群资源管理器(Cluster Manager)通信,一旦与集群资源管理器连接,Spark会为该应用在各个集群节点上申请执行器(Executor),用于执行计算任务和存储数据。Spark将应用程序代码发送给所申请到的执行器,SparkContext对象将分割出的任务(Task)发送给各个执行器去运行。

业界挑战与实践

  1. Shuffle稳定性问题:在大规模作业下,开源ESS的实现机制容易带来大量随机读导致的磁盘IOPS瓶颈、Fetch请求积压等问题。
  • 将数据远端存储
  • 在ShuffleReduce端将数据聚合减少排序操作
  1. SQL执行性能问题:压榨CPU资源
  • 事先将数据载入Catch
  • Simd优化
  • 优化CPU两条路线:1. 向量化;2. Codegen