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

139 阅读3分钟

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

Spark介绍

Spark是一个基于内存的快速、通用、可扩展的大数据分析计算引擎,由Scala开发。Java,scala,python,R和SQL都可以访问SparkAPI。

功能:
允许用户读取,转换,聚合数据,可以轻松训练和部署复杂的统计模型,或者打包成为要部署在集群上的库。或通过notebook交互式执行快速的分析。

包含:SparkCore,SparkSQL,SparkStreaming,Spark MLib,Spark GraphX

Spark运行架构

Spark框架的核心是一个计算引擎,整体来说,它采用了标准master-slave的结构。
如下图所示,它展示了一个Spark执行时基本结构。图形中的Driver表示master,负责管理整个集群中的作业任务调度。图形中的Executor则是slave,负责实际执行任务

image.png

spark自身资源调度–Master 和 Worker

Master 和 Worker,Master 是一个进程,主要负责资源的调度和分配,并进行集群的监控等职责,类似于 Yarn 环境中的 RM, 而Worker 也是进程,一个 Worker 运行在集群中的一台服务器上,由 Master 分配资源对数据进行并行的处理和计算,类似于 Yarn 环境中 NM。

ApplicationMaster

Hadoop 用户向 YARN 集群提交应用程序时,提交程序中应该包含ApplicationMaster,用于向资源调度器申请执行任务的资源容器 Container,运行用户自己的程序任务 job,监控整个任务的执行,跟踪整个任务的状态,处理任务失败等异常情况。简单点就是,ResourceManager(资源)和 Driver(计算)之间的解耦合靠的就是ApplicationMaster。

提交流程

spark:

1.作业提交
2.DAG构建
3.任务调度
4.任务执行

image.png

Spark核心编程

Spark 计算框架为了能够进行高并发和高吞吐的数据处理,封装了三大数据结构,用于处理不同的应用场景。三大数据结构分别是:

RDD : 弹性分布式数据集
累加器:分布式共享只写变量
广播变量:分布式共享只读变量

RDD运行原理

RDD典型执行过程如下:

RDD读入外部数据源进行创建, RDD经过一系列的转换操作,每一次都会产生不同的RDD,供给下一个转换操作使用, 最后一个RDD经过动作操作进行转换,并输出到外部数据源 这一系列处理称为一个Lineage(血缘关系),即DAG拓扑排序的结果 优点:惰性调用、管道化、避免同步等待、不需要保存中间结果、每次操作变得简单

RDD特性

1.高效的容错性:

现有容错机制:数据复制或者记录日志 RDD:血缘关系、重新计算丢失分区、无需回滚系统、重算过程在不同节点之间并行、只记录粗粒度的操作

2.中间结果持久化到内存,数据在内存中的多个RDD操作之间进行传递,避免了不必要的读写磁盘开销

3.存放的数据可以是Java对象,避免了不必要的对象序列化和反序列化