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

108 阅读2分钟

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

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

1.大数据处理技术栈

image.png

  • 分布式文件存储系统:hdfs 字节TOS 亚马逊S3对象存储
  • 分布式消息系统:Kafka
  • key-value分布式引擎:nosql数据库 HBase
  • 基于列式存储的数据库:Kudu
  • Spark批式计算 flink流式计算
  • 处理在线分布式场景可交互式OLAP引擎:Presto、Impala、ClickHouse
  • 计算框架借助资源管理的编排调度工具:YARN/K8S运行在分布式集群中处理数据

2.常见大数据处理链路

image.png

3.开源大数据处理引擎

流式计算:Flink
批式计算:Spark(主流)、Hive、Hadoop(解决数据大规模处理问题)
OLAP:presto、ClickHouse、impala、DORIS

4.Spark:用于大规模数据处理的统一分析引擎

5.Spark生态和特点

  • 统一引擎,支持多种分布式场景
  • 多语言支持,可以用统一方式处理流批数据

image.png

  • 可读写丰富数据源(根据对应包匹配数据源)
    (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:查询时间变短了 四个任务变成五个

3.Runtime Filter