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采用了数据本地性【计算向数据靠拢】和推测执行【比较哪里执行任务会更好的机制】等优化机制