这是我参与「第四届青训营 」笔记创作活动的第14天
一.大数据处理引擎Spark介绍
1.大数据处理技术栈
- 分布式文件存储系统:hdfs 字节TOS 亚马逊S3对象存储
- 分布式消息系统:Kafka
- key-value分布式引擎:nosql数据库 HBase
- 基于列式存储的数据库:Kudu
- Spark批式计算 flink流式计算
- 处理在线分布式场景可交互式OLAP引擎:Presto、Impala、ClickHouse
- 计算框架借助资源管理的编排调度工具:YARN/K8S运行在分布式集群中处理数据
2.常见大数据处理链路
3.开源大数据处理引擎
流式计算:Flink
批式计算:Spark(主流)、Hive、Hadoop(解决数据大规模处理问题)
OLAP:presto、ClickHouse、impala、DORIS
4.Spark:用于大规模数据处理的统一分析引擎
5.Spark生态和特点
- 统一引擎,支持多种分布式场景
- 多语言支持,可以用统一方式处理流批数据
- 可读写丰富数据源(根据对应包匹配数据源)
(1)内置数据源:Text、Parquet/ORC、JSON/CSV、JDBC (2)自定义数据源:实现DataSourceV1/V2 API、HBase/Mongo/ElasticSearch…… - 丰富灵活的API算子 (1)SparkCore->RDD:map/filter/mapPartitions…… (2)SparkSQL->DataFrame:select/filter/groupBy/agg……
- 支持K8S/YARN/Mesos资源调度
- 可以用仪表盘等执行快速sql查询分析
- 适用于大规模数据科学,对PB级别数据进行分析
- 机器学习,可以在单机训练机器学习再拓展至大规模集群
6.Spark运行架构和部署方式
- 部署方式:Spark Local Mode(本地测试/单进程多线程模式)
- 运行架构:
二.SparkCore原理解析
1.RDD:
(1)RDD是一个容错的,可以并行执行的分布式数据集。(最基本数据处理模型)
(2)五要素
(3)如何创建RDD
- 内置RDD
- 自定义RDD (4)RDD算子 Trnsform算子:生成一个新的RDD Action算子 (5)RDD依赖
- 窄依赖
- 宽依赖 设置检查点,若有丢失 (6)执行流程 遇到宽依赖,划分一个stage,窄依赖则加入到stage中。最后一个阶段生成partition,产生resulttask,其他task叫shuffleMapTask
2.调度器
根据
3.内存管理
4.Shuffle
(1)SortShuffleManager(两个join的数据量都较大时) partition会根据索引找到对应文件 (2)External Shuffle Service(运行在每个主机,处理每个主机所有的excutor节点产生的shuffle数据) 内存空间不足时,任务会被阻塞直到有空间
三.SparkSQL原理解析
1.Catalyst优化器
RBO CBO BHJ:大表跟小表(性能最好,小表可以jion内存) SHJ:小表超10兆 SMJ:两张大表
AQE:查询时间变短了 四个任务变成五个