这是我参与「第四届青训营 」笔记创作活动的的第5天
一、大数据处理引擎Spark介绍
1.大数据处理技术栈
大数据的特性,数据是海量的,数据源是丰富多样的,有消息,图片,音视频流,数据产生的非常快,需要快速处理,提高数据价值。 数据生成后,需要存储元数据信息,选择合适的存储格式,像Parquet、ORC是两种高性能的列式存储,Hudi数据存储的中间件,优化存储的读写,也可以存储到分布式文件存储系统HDFS,分布式消息系统kafka,keyvalue分布式存储的nosql引擎数据库HBase,基于列式存储的分布式数据库Kudu,字节提供的TOS,S3对象存储。 存储的数据需要计算才能使用,大数据的计算框架,Spark批式计算,Flink流式计算,Presto等处理在线分布式查询场景的,是可交互式的OLAP引擎,计算框架借助资源管理的编排调度工具YARN,K8S,来运行在分布式集群中处理存储的数据。 计算处理存储的数据后提供给上层应用,有BI报表,广告,推荐,金融风控等。
4.什么是Spark?
Spark是用于大规模数据处理的统一分析引擎,是一种多语言引擎,可以用于单机节点或集群上来执行数据工程,数据科学和机器学习。
feature:
- 多语言选择,用统一的方式处理流批的数据
- 可以用为仪表盘执行快速的sql查询分析,
- 适用于大规模的数据科学,对PB级别的数据来执行探索性的数据分析,对数据进行训练建模预测。
- 机器学习,在单机上训练机器学习的算法,可以很方便的拓展到大规模集群上
三、SparkSQL原理解析
1.SparkSQL执行过程
- SQL Parse: 将SparkSQL字符串或DataFrame解析为一个抽象语法树/AST,即Unresolved Logical Plan
- Analysis:遍历整个AST,并对AST上的每个节点进行数据类型的绑定以及函数绑定,然后根据元数据信息Catalog对数据表中的字段进行解析。 利用Catalog信息将Unresolved Logical Plan解析成Analyzed Logical plan
- Logical Optimization:该模块是Catalyst的核心,主要分为RBO和CBO两种优化策略,其中RBO是基于规则优化,CBO是基于代价优化。 利用一些规则将Analyzed Logical plan解析成Optimized Logic plan
- Physical Planning: Logical plan是不能被spark执行的,这个过程是把Logic plan转换为多个Physical plans物理执行计划
- CostModel: 主要根据过去的性能统计数据,选择最佳的物理执行计划(Selected Physical Plan)。
- Code Generation: sql逻辑生成Java字节。