Spark的组成模块
- sparkCore:实现了spark的基本功能,包括任务调度、内存管理、错误恢复。sparkCore里面还包含了弹性数据集(RDD)的API定义
- sparkSql:是spark用来操作结构化数据的程序包。我们可以通过sql或者hive的hsql的方式来查询数据
- sparkStreaming:是spark提供的对实时数据进行处理的组件
- sparkMLlib:提供常见的机器学习功能的程序包
- 集群管理:spark支持可以自各种集群管理器是上运行:mesos、yarn或者自带的简易调度器
重要角色:
Driver:
spark的执行器就是我们开发程序的main方法的进程,他是用来创建sparkContext、创建RDD、以及进行RDD的转换和行动操作。如果你是spark shell那么在启动的时候就会自动的给你创建一个sc的sparkContext对象,如果驱动器终止,那么spark应用也就结束了。主要作用:
1、把用户的程序转换成作业job
2、跟踪Executor的执行状态
3、为执行器节点调度任务
4、ui展示应用的运行状况
Executor
伴随着spark的整个生命周期而存在的,执行spark的任务,是一个工作进程,如果一个executor在执行任务的时候崩溃了那么就会将任务放到其他的节点上继续执行。主要作用为:
1、负责spark任务的运行计算并将结果返回给驱动进程
2、通过自身的块管理器为用户程序中要求进行RD缓存提供内存是的存储。RDD的缓存是在Executor上的,因此可以充分的利用缓存数据块进行加速。
Local本地模式:
本地模式就是在单机的情况下运行,主要用于测试或者练手,他可以有几种设置master的方式:
1、local:所有的计算都在一个线程中
2、local【N】:N是几就执行几个线程
3、local【*】:cpu有几个核就跑几个线程
Yarn模式(重点)
spark连接yarn不需要构建spark集群。有spark-client和spark-cluster主要区别于,Driver程序的运行节点
yarn-client:Driver程序在客户端,适用于交互、调试希望立刻看到app的输出
yarn-cluster:程序运行在由RM启动的Ap(AppMaster)使用与生产环境。
Spark 内核概述
Spark内核泛指Spark的核心运行机制,包括Spark核心组件的运行机制、Spark任务调度机制、Spark内存管理机制、Spark核心功能的运行原理等,熟练掌握Spark内核原理,能够帮助我们更好地完成Spark代码设计,并能够帮助我们准确锁定项目运行过程中出现的问题的症结所在。
spark通用流程:
上图为spark通用运行流程,不论spark以任何模式部署任务提交后都先会启动Driver进程,然后通过Driver进程去我们的集群管理器进行注册,集群管理器在根据我们的配置文件来分配指定的Executor当我们的资源满足后,Driver就会执行main方法,spark的查询为懒加载,当我们遇到行动算子之后,开始根据宽依赖来进行stage的划分,每个一个stage都对应一个taskset,,taskset中又包含了多个task,根据本地化原则,task会被划分到指定的executor进行执行,executor在进行任务运行期间也会同driver进行通信来报告任务的运行情况。
Spark 部署模式
1.Standalone:独立模式,Spark原生的简单集群管理器,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统,使用Standalone可以很方便地搭建一个集群;
2.Apache Mesos:一个强大的分布式资源管理框架,它允许多种不同的框架部署在其上,包括yarn;
3.Hadoop YARN:统一的资源管理机制,在上面可以运行多套计算框架,如map reduce、storm等,根据driver在集群中的位置不同,分为yarn client和yarn cluster。
实际上,除了上述这些通用的集群管理器外,Spark内部也提供了一些方便用户测试和学习的简单集群部署模式。由于在实际工厂环境下使用的绝大多数的集群管理器是Hadoop YARN,因此我们关注的重点是Hadoop YARN模式下的Spark集群部署。
Spark的运行模式取决于传递给SparkContext的MASTER环境变量的值,个别模式还需要辅助的程序接口来配合使用,目前支持的Master字符串及URL包括:
用户在提交任务给Spark处理时,以下两个参数共同决定了Spark的运行方式。
· –master MASTER_URL :决定了Spark任务提交给哪种集群处理。
–deploy-mode DEPLOY_MODE:决定了Driver的运行方式,可选值为Client或者Cluster。
Standalone模式运行机制
1、Driver:这是一个进程,主要负责执行我们用户写的main方法。
2、Master:是一个进程,主要负责资源的调度和分配,集群监控等职责
3、Worker:是一个进程,一个worker运行在一个节点上,他是用来启动其他进程或线程(Executor),缓存RDD的partition和对RDD 进行计算的。
4、Executor:是一个进程,一个worker上可以运行多个executor、Executor通过启动多个task来进行RDD的计算。
client模式:
在Standalone Client模式下,Driver在任务提交的本地机器上运行,Driver启动后向Master注册应用程序,Master根据submit脚本的资源需求找到内部资源至少可以启动一个Executor的所有Worker,然后在这些Worker之间分配Executor,Worker上的Executor启动后会向Driver反向注册,所有的Executor注册完成后,Driver开始执行main函数,之后执行到Action算子时,开始划分stage,每个stage生成对应的taskSet,之后将task分发到各个Executor上执行。
Standalone Cluster模式