Spark最初的设计目标是基于内存计算的大数据批处理系统,用于构建大型的、低延迟的数据分析应用程序。
Spark从最初仅使用内存的批处理系统,转为内外存同时使用的批处理系统,增加 Spark Streaming 支持实时流计算,Structured Streaming 支持批流融合,也提供机器学习工具包 MLlib 和图处理工具包 GraphX。因而 Spark 已形成较完整的软件栈。
本章讲述的 Spark 实际上是指 Spark Core 内容。
1 设计思想
1.1 MapReduce的局限性
- MapReduce仅提供map和reduce两个编程算子,编程框架的表达能力有限,用户编程复杂。
- 单个作业中,需要Shuffle的数据以阻塞方式传输,磁盘I/O开销大,延迟高。
- 需要Shuffle的数据先由Map任务将计算结果写入本地磁盘,之后Reduce任务才能读取该计算结果。
- 多个作业之间衔接涉及I/O开销,应用程序的延迟高。
- 特别是延迟计算,迭代中间结果的反复读写,使得整个应用程序的延迟非常高
- 资源管理和作业管理紧耦合。
1.2 数据模型
Spark 将数据抽象为弹性分布式数据集 RDD
,具有3个特性:
- Resilient:具有可恢复的容错特性
- distributed:每个RDD分为多个分区,不同分区存在集群不同节点,每个分区是一个数据集片段
- Dataset:Spark 操作对象是抽象的数据集,而不是文件
1.3 计算模型
Spark提供丰富的操作算子对RDD进行变换。操作算子
分为:
- 创建:从本地内存或外部数据源创建RDD,提供数据输入的功能。
- 转换 Transformation:描述RDD的转换逻辑,提供对RDD进行变换的功能。
- 行动 Action:标志转换结束,触发
DAG
生成。- 行动操作包含数据输出类、count、collect等操作算子
RDD是只读的,不可变。RDD转换/行动操作会不断生成新的RDD,而不改变原有的RDD。
—— 遵循函数式编程的特性(变量值是不可变的)
为什么这样设计?
对RDD进行并行转换操作时,RDD的不变性能简化设计,也能保证容错恢复
Spark的逻辑计算模型
:Operator DAG、RDD Lineage
- Operator DAG 描述的主体是算子,RDD Lineage 描述的主体是数据
- RDD Lineage中,通过读入外部数据源进行RDD创建,经过一系列转换操作,每次都产生不同的RDD供下一个转换操作使用,最后一个RDD经过“行动”操作进行转换并输出到外部数据源。
Spark的物理计算模型
2 体系架构
2.1 架构图
抽象的Spark架构图,包含:集群管理器、执行器、驱动器。
- Cluster Manager:集群管理器,负责管理整个系统的资源,监控工作节点。
- 根据Spark部署方式的不同,Spark可分为:
- Standalone模式:不使用Yarn等其他资源管理系统,该模式的集群管理器包含Master、Worker
- Yarn模式:将Spark与Yarn一起部署,该模式的集群管理器包含ResourceManager、NodeManager
- 根据Spark部署方式的不同,Spark可分为:
- Executor:执行器,负责任务执行。
- Driver:驱动器,负责启动应用程序的主方法并管理作业运行。
⚠️MapReduce中Task是进程,Spark中Task是线程。
Spark架构实现资源管理、作业管理的分离:Cluster Manager负责集群资源管理、Driver负责作业管理。
Standalone模式下Spark的架构图(没画Driver)
Standalone中的Driver:
- 逻辑上,Driver独立于主节点、从节点以及客户端
- 但根据应用程序的不同运行方式,Driver可以不同形式存在
客户端提交应用程序时可以选择Client或Cluster。
Spark系统
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。