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

244 阅读3分钟

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

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

上节课我们学习了流计算中的window计算明白了三种窗口,watermark,迟到数据处理、emit等,今天我们来学习spark引擎

大数据处理引擎Spark介绍

大数据处理技术栈

image.png

这个已经在我之前的文章做过详细地讲解了,就不多阐述了

常见大数据处理链路

image.png

这张图很具象地展示了一般情况下的大数据是怎么处理的,首先各种数据被采集,经过一些引擎比如Kafka、HDFS等处理得到的数据存储在数仓中,之后经过Flink、Spark等处理,再由SQL语言调度,最后输出

什么是Spark

Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。

Spark是UC Berkeley AMP lab 加州大学伯克利分校的AMP实验室所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;

但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。

引用自百度百科

Spark本身也具有很多的优点:多平台语言统一标准的SQL语言操作读入PB级别的数据支持ML算法

Spark生态&特点

Spark支持一系列丰富的框架系统,拥有一个完善的生态如下

image.png

同样的,Spark也有许多特点:

  • 统一引擎,支持多种分布式场景
  • 多语言支持
  • 可读写丰富数据源
  • 丰富灵活的API/算子
  • 支持K8S/YARN/Mesos资源调度等

SparkCore 原理解析

SparkCore

image.png

Spark有一系列的核心,但最重要的还是RDD

什么是RDD?

RDD(Resilient Distributed Datasets) ,弹性分布式数据集, 是分布式内存的一个抽象概念,RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,只能通过在其他RDD执行确定的转换操作(如map、join和group by)而创建,然而这些限制使得实现容错的开销很低

可见,RDD的本质还是一个数据集,可见增加容错、减少开销

RDD算子

  • Transform算子:生成一个新的RDD

map/filter/flatMap/groupByKey等

  • Action算子:触发Job提交

collect/count/take/saveAsTextFile等

RDD依赖

RDD依赖就是描述父子RDD之间的依赖关系(Lineage)

窄依赖:父RDD的每个partition至多对应一个子RDD分区

宽依赖:父RDD的每个partition都可能对应多个子RDD分区

RDD的执行流程

image.png

sparkSQL

Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用。、

Spark SQL的特点:

1.容易整合(集成) 

2.统一的数据访问方式

3.兼容Hive
 

4.标准的数据连接