0
点赞
收藏
分享

微信扫一扫

Spark的设计和运行原理

汤姆torn 2022-01-28 阅读 58


Spark的设计和运行原理

1.spark底层运行原理

2.spark(计算框架)的主要特点

1.运行速度快 使用DAG执行引擎以支持循环数据流,内存计算

2.通用性 SQL查询,流式计算,机器学习和图算法组件

3.容易使用 支持使用Scala,Java,Python,R语言等编程,可以通过Spark shell进行交互式编程

4.运行模式多样性:可运行在独立的集群模式中,也可以运行在hadoop中,也可以运行在Amazon EC2等云环境中

5.spark生态系统

01,复杂的批量数据处理 通常时间跨度在数十分钟到数小时之间

02,基于历史数据的交互式查询 时间跨度在数十秒到数分钟之间

03,基于实时数据的数据处理 时间跨度在数百毫秒到数秒之间

6.spark与其他数据处理系统之间的对比

01.hive 基于MapReduce框架,所以延迟比较大

02.Cloudrea impala 基于历史数据的交互式查询

03.storm 基于实时数据流的数据处理

使用这些不同场景的系统,容易引发的问题:

1.不同场景之间输入输出数据无法做到无缝共享,通常需要进行数据格式的转换

2.不同的软件需要不同的开发和维护团队,带来了较高的使用成本

3.难以对同一个集群中的各个系统进行统一的资源协调和分配

spark就可以解决上述的三个问题

遵循“一个软件栈”

组件很多

“核心:spark core”

spark SQL 提供交互式查询分析 (基于历史数据)

Spark core 提供内存计算

Spark Streaming 提供流计算功能

Mllib 机器学习 (基于历史数据的数据挖掘 )

GraphX 图算法组件

7.基本概念

1,RDD 分布式内存的一个抽象概念,提供了一个高度受限的共享内存模型

2,DAG 有向无环图

3,Executor 运行在工作节点上的一个进程,负责运行Task。每个工作节点上负责具体任务的执行进程

4,Application 用户编写的Spark应用程序

5,Task 运行在Executor上的工作单元

6,Job 一个Job包含多个RDD及作用于相应RDD上的各种操作

7,Stage 是Job的基本调度单位,一个Job会分为多组Task,每组Task被称为Stage,或者也被称之为TaskSet,代表了一组关联的、相互之间没有shuffle依赖关系的任务组成的任务集

8.Cluster Manager 集群资源管理器 资源管理器可以自带或者使用Mesos/Yarn

运行作业任务的工作节点 Worker Node

每个应用的任务控制节点:Driver Program

9.利用多线程来执行具体的任务减少任务的启动开销

Executor中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备,有效减少IO开销 在内存实在存不下去的时候,再将数据存储到磁盘中

当执行一个Application是,Driver会向集群管理器申请资源,启动Executor发送应用程序代码和文件,然后在Executor上执行Task,运行结束后,执行结果会返回给Driver,或者写到HDFS或者其他的数据库中。

SparkContext

SparkContext是连接集群的通道

01,为应用构建基本的运行环境,即由Driver创建一个SparkContext进行资源的申请、任务的分配和监控

执行命令 Spark-shell 的时候,系统会自动默认创建SparkContext的实例变量,但是如果是在自己编写的程序中,需要自己new一个SparkContext的实例

02,资源管理器为Executor分配资源,并启动Executor进程。

Executor进程会启动许多线程执行任务

03,SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAGSchedule解析成Stage,然后把一个个TaskSet提交给底层调度器TaskScheduler处理。

Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor运行并提供应用程序代码。

针对RDD的操作将会生成一个有向无环图。

Executor申请运行任务,接收到申请之后,Task Scheduler 按照一定的规则发放任务【计算向数据靠拢】,

04,Task在Executor上运行,并把执行结果反馈给TaskScheduler,然后反馈给DAGScheduler,运行完毕后写入数据库并释放所有资源

spark运行架构特点

1,每个APplication都有自己专属的Executor进程,并且该进程在Application运行期间一直主流。Executor进程以多线程的方式运行task

2,Spark运行过程与资源管理器无关,只要能够获得Executor进程并保持通信即可

3,Task采用了数据本地性【计算向数据靠拢】和推测执行【比较哪里执行任务会更好的机制】等优化机制



举报

相关推荐

0 条评论