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特点
- 多语言支持:支持SQL、JAVA/Scale、Python、R等语言进行开发。
- 丰富的数据源:内置DataSource包括Text、Parquet/ORC、JSON/CSV、JDBC,还可以自定义DataSource。
- 丰富的API/算子
SparkSQL
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运行架构和工作原理
Spark应用在集群上运行时,包括了多个独立的进程,这些进程之间通过驱动程序(Driver Program)中的SparkContext对象进行协调,SparkContext对象能够与多种集群资源管理器(Cluster Manager)通信,一旦与集群资源管理器连接,Spark会为该应用在各个集群节点上申请执行器(Executor),用于执行计算任务和存储数据。Spark将应用程序代码发送给所申请到的执行器,SparkContext对象将分割出的任务(Task)发送给各个执行器去运行。
业界挑战与实践
- Shuffle稳定性问题:在大规模作业下,开源ESS的实现机制容易带来大量随机读导致的磁盘IOPS瓶颈、Fetch请求积压等问题。
- 将数据远端存储
- 在ShuffleReduce端将数据聚合减少排序操作
- SQL执行性能问题:压榨CPU资源
- 事先将数据载入Catch
- Simd优化
- 优化CPU两条路线:1. 向量化;2. Codegen