Spark原理与实践 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第7天
上节课我们学习了流计算中的window计算明白了三种窗口,watermark,迟到数据处理、emit等,今天我们来学习spark引擎
大数据处理引擎Spark介绍
大数据处理技术栈
这个已经在我之前的文章做过详细地讲解了,就不多阐述了
常见大数据处理链路
这张图很具象地展示了一般情况下的大数据是怎么处理的,首先各种数据被采集,经过一些引擎比如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支持一系列丰富的框架系统,拥有一个完善的生态如下
同样的,Spark也有许多特点:
- 统一引擎,支持多种分布式场景
- 多语言支持
- 可读写丰富数据源
- 丰富灵活的API/算子
- 支持K8S/YARN/Mesos资源调度等
SparkCore 原理解析
SparkCore
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的执行流程
sparkSQL
Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用。、
Spark SQL的特点:
1.容易整合(集成)
2.统一的数据访问方式
3.兼容Hive
4.标准的数据连接