Spark的前世今生

Spark是由AMP实验室开源的分布式计算引擎,旨在简化技术选型,提供批处理、流处理、交互式计算和机器学习的统一平台。Spark以其高吞吐、低延迟和丰富的API在大数据领域广泛应用。其核心概念RDD(弹性分布式数据集)支持并行转换操作,通过Transformation和Action进行计算。RDD的依赖关系包括窄依赖和宽依赖,Spark提供了缓存机制以提高性能。Spark程序架构包括Driver、SparkContext、Executor和Task,支持Local、Standalone、Yarn和Mesos等多种运行模式。
摘要由CSDN通过智能技术生成

Spark****产生背景

➢ 计算处理框架种类多,选型复杂

批处理:MapReduce、Hive、Pig

流式计算:Storm

交互式计算:Impala、Presto

机器学习算法:Mahout

➢ 希望能够简化技术选型,在一个统一的框架下,能够完成批处理、流式计算、交互式计算、机器学习算法等

Spark****简介

➢ 由加州大学伯克利分校的AMP实验室开源

➢ 大规模分布式通用计算引擎

➢ 具有高吞吐、低延时、通用易扩展、高容错等特点

➢ 使用Scala语言开发,提供了丰富的开发API,支持Scala、Java、Python、R开发语言

➢ Spark提供多种运行模式

img

Spark****特点

➢ 计算高效

​ • 使用内存计算引擎,提供Cache缓存机制支持迭代计算或多次数据共享

,减少数据读取的IO开销

• DAG引擎,减少多次计算之间中间结果写到HDFS的开销,使用多线程池模型来减少task启动开销,shuffle过程中避免不必要的sort操作以及减少磁盘IO操作

➢ 通用易用

​ • 提供了丰富的开发API,支持Scala、Java、Python、R开发语言

​ • 集成批处理、流处理、交互式计算、机器学习算法、图计算

➢ 运行模式多样

​ • Local、Standalone、Yarn、Mesos

img

Spark****核心概念-RDD

➢ RDD:Resilient Distributed Datasets弹性分布式数据集

• Spark基于RDD进行计算

• 分布在集群中的只读对象集合(由多个Partition构成)

• 可以存储在磁盘或内存中

• 可以通过并行转换操作构造

• 失效后自动重构

img

RDD****操作(Operator)

➢ Transformation

• 将Scala集合或者Hadoop数据集构造一个新的RDD

• 通过已有的RDD产生新的RDD

• 只记录转换关系,不触发计算

• 如:map、filter等

➢ Action

• 通过RDD计算得到一个或者一组值

• 真正触发执行

• 如:count、collect、saveAsTextFile

img

Transformation与Action对比

➢ 接口定义方式不同

• Transformation:RDD[X] -> RDD[Y]

• Action:RDD[X] -> Z

➢ 执行计算方式不同

• Transformation采用惰性执行方式,只记录RDD转化关系,不会触发真正计算执行

• Action真正触发计算执行

RDD Dependency****依赖

Narrow Dependency窄依赖

• 父RDD中的分区最多只能被一个子RDD的一个分区使用

• 子RDD如果只有部分分区数据丢失或者损坏只需要从对应的父RDD重新计算恢复

Shuffle Dependency宽依赖

• 子RDD分区依赖父RDD所有分区

• 子RDD如果部分分区或者全部分区,数据丢失或者损坏需要从所有父RDD重新计算,相对窄依赖付出的代价更高,尽量避免宽依赖的使用

RDD Cache****缓存

➢ Spark允许将RDD缓存到内存或磁盘上,方便重用,提高性能

➢ Spark提供了多种缓存级别

➢ 用户可以根据实际需求进行调整

​ val rdd = sc.textFile(inputArg)

rdd.cache()//实际上是调用了rdd.persist(StorageLevel.MEMORY_ONLY)

//data.persist(StorageLevel.MEMORY_AND_DISK)

Spark****程序架构

​ ➢ Driver:一个Spark程序有一个Driver,一个Driver创建一个Spark Context,程序的main函数运行在Driver中。Driver主要负责Spark程序的解析、划分Stage,调度Task到Executor上执行

➢ SparkContext:加载配置信息,初始化Spark程序运行环境,创建内部的DAGScheduler和TaskScheduler

➢ Executor:负责执行Driver分发的Task任务,集群中一个节点可以启动多个Executor,每个一个Executor通过多线程运行多个Task任务

➢ Task:Spark运行的基本单位,一个Task负责处理RDD一个分区的计算逻辑

img

Spark****运行模式

➢ Local本地模式

• 单机运行,通常用于测试

➢ Standalone独立模式

​ • Spark集群单独运行

➢ Yarn/Mesos

• 运行在其他资源管理系统上,如Yarn、Mesos

Spark Local****模式

➢ Local本地模式

• 将Spark应用以多线程方式,直接运行在本地,方便调试

➢ 本地模式分类

• local:只启动一个线程运行executor

• local[n]:启动n个线程运行executor

• local[*]:启动跟cpu数目相同的executor

➢ Spark集群独立部署

img

YARN****程序运行流程

img

Spark YARN****模式

➢ yarn-cluster

img

➢ yarn-client

img

Spark****内部执行流程

img

生成逻辑查询计划

img

生成物理查询计划

img

任务调度与执行

img

Spark****调度模块

➢ DAG:Directed Acyclic Graph有向无环图

➢ DAGScheduler

根据计算任务的依赖关系建立DAG

根据依赖关系是否是宽依赖,将DAG划分为不同的Stage阶段

将各个Stage中的Task组成的TaskSet提交到TaskScheduler

➢ TaskScheduler

负责Application的Job调度

重新提交执行失败的Task

为执行速度慢的Task启动备份任务

img

Spark****任务类型和Job划分

➢ Spark中task类型

• ShuffleMapTask:除了最后一个输出Task,其他Task类型都是ShuffleMapTask

• ResultTask:只有最后一个阶段输出的Task是ResultTask

➢ Appication中调用一次Action就会生成一个Job

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值