Spark作为一种通用的大数据分析引擎,集成了批处理、流式查询以及交互式查询于一体,其技术体系相当复杂,本文简要介绍了Spark中的基本架构和基本概念RDD和执行流程,以及Spark on YARN两种模式。
Apache Spark是一种通用可扩展的大数据分析引擎,集批处理、实时流处理、交互式查询与流计算于一体,避免了多种运算场景下需要部署不同集群带来的资源浪费。另外,Spark是基于内存的计算,相较于MapReduce或者Hive,处理效率上要提升数倍。
Spark是一种通用的大数据分析引擎,包含了大数据领城常见的各种计算框架:使用Spark Core用于离线计算;Spark SQL用于交互式查询;基于Spark Streaming实现实时流式计算;Spark MILlib用于机器学习;Spark GraphX用于图计算。
1)Spark Core
包含Spark的基本功能,包含任务调度,内存管理,容错机制等,为其他组件提供底层的服务。在内部定义了RDDs(弹性分布式数据集),提供了很多APIs来创建和操作这些RDDs。
2)Spark SQL
支持像其它数据库一样,使用SQL的方式处理结构化的数据源,包括Hive、HBase、MySQL、JSON等。Spark SQL提供了两种抽象的数据集合:DataFrame和Datasets
3)Spark Streaming
基于Spark Core实现了可扩展、高吞吐和容错的实时流处理,支持的数据源有Kafka、Flume、HDFS和TCP socket等,处理后的结果存储到HDFS或数据库中。Spark Streaming是将流式计算分解成一系列短小的批处理作业,每个批处理作业处理一段数据,每一段数据转换成Spark中的RDD进行转换操作。
4)MLib
MLIB是Spark对常用的机器学习算法的实现库,包括分类、回归、聚类、协同过滤、降维等算法,同时支持流水线的学习模式,即多个算法使用不同的参数以流水线的形式编排运行,得到算法的结果。
5)Graphx
Spark提供的关于图和图并行计算的API,集ETL、试探性分析和迭代式图计算于一体。
Spark整体架构如图所示,包括ClusterManager、Worker、Driver和executor等。
1)Cluster Manager
集群管理器,它存在于Master进程中,主要用来对应用程序申请的资源进行管理和调度,根据其部署模式的不同,可以分为local,standalone,yarn,mesos等模式。
2)worker
Spark的工作节点,用于执行任务的提交,主要工作职责有以下:
在yarn 模式下运行worker节点一般指的是NodeManager节点,standalone模式下运行一般指的是slave节点。
3)executor
Executor是真正执行计算任务的组件,它是application运行在worker上的一个进程。这个进程负责Task的运行,它能够将数据保存在内存或磁盘存储中,也能够将结果数据返回给Driver。Executor宿主在worker节点上,每个Worker上存在一个或多个Executor进程,每个executor持有一个线程池,每个线程可以执行一个task。根据Executor上CPU-core的数量,其每个时间可以并行多个跟core一样数量的task,其中task任务即为具体执行的Spark程序的任务。
4)Application
Application是Spark API编程的应用程序,它包括实现Driver功能的代码和在程序中各个executor上要执行的代码,一个application由多个job组成。其中应用程序的入口为用户所定义的main方法。
5)Driver
Driver的功能是创建SparkContext,负责执行用户写的Application的main函数进程,创建SparkContext的目的是为了准备Spark应用程序的运行环境。Application通过Driver和Cluster Manager及executor进行通讯,当Executor部分运行完毕后,Driver同时负责将SparkContext关闭。Driver可以运行在application节点上,也可以由application提交给Cluster Manager,再由Cluster Manager安排worker节点运行。Driver节点也负责提交Job,并将Job转化为Task,在各个Executor进程间协调Task的调度。
6)sparkContext
sparkContext是整个spark应用程序最关键的一个对象,是Spark所有功能的主要入口点。核心作用是初始化spark应用程序所需要的组件,同时还负责向master程序进行注册等。
用户程序从最开始提交到最终的计算执行,需要经历以下几个阶段:
RDD是弹性分布式数据集,是Spark中数据处理的最基本抽象,可以被并行操作的元素集合。RDD在本质上是一个只读的分区记录集合,每个RDD可分成多个分区,每个分区就是一个数据集片段,并且一个RDD的不同分区可以被保存到集群中不同的节点上,从而可以在集群的不同节点上进行并行计算。
RDD提供了一种高端受限的共享内存模型,即RDD是只读的记录分区的集合,不能直接修改,只能基于稳定的物理存储中的数据集创建RDD,或者通过在其他RDD上执行确定的转换操作(如map,join和group by)而创建得到新的RDD。Spark中可以通过一系列的算子对RDD进行操作,主要分为Transformation和Action两种操作。
RDD具有自动容错、位置感知性调度和可伸缩性的特点,每个RDD主要有以下属性:
Spark会根据用户提交的逻辑中的RDD操作生成RDD之间的依赖关系,同时这个计算链生成了逻辑上的DAG。在Spark中DAG主要分为DAGScheduler和TaskScheduler:
Spark的运行模式主要有以下几种:
运行模式 | 运行类型 | 说明 |
---|---|---|
local | 本地模式 | 常用于本地开发测试,分为local单线程和local-cluster多线程模式 |
standalone | 集群模式 | 独立模式,在spark自己的资源调度管理框架上运行,该框架采用master/salve结构 |
yarn | 集群模式 | 在yarn资源管理器框架上运行,由yarn负责资源管理,spark负责任务调度和计算 |
mesos | 集群模式 | 在mesos资源管理器框架上运行,由mesos负责资源管理,spark负责任务调度和计算 |
k8s | 集群模式 | 在k8s上运行 |
Spark on YARN分为两种模式yarn-client模式和yarn-cluster模式,一般采用的是yarn-cluster模式。yarn-cluster和yarn-client的区别在于yarn appMaster,yarn-cluster中ApplicationMaster不仅负责申请资源,并负责监控Task的运行状况,因此可以关掉client;yarn-client中ApplicationMaster仅负责申请资源,由client中的driver来监控调度Task的运行,因此不能关掉client。
Spark技术体系相当复杂,本文简要介绍了Spark中的基本架构和基本概念RDD和执行流程,以及Spark on YARN两种模式。Spark有关的开发在之前的大数据系列中有所涉及,这里不再赘述。
参考资料:
转载请注明原文地址:https://blog.csdn.net/solihawk/article/details/126165093
文章会同步在公众号“牧羊人的方向”更新,感兴趣的可以关注公众号,谢谢!