Spark 2.1.0源码剖析
本专栏致力剖析Spark 2.1.0源码,在学习中不断提高
拾荒路上的开拓者
可能出错的地方,一定会出错
展开
-
Spark调度系统——概述
简单来讲,Spark调度系统用于将用户提交的“任务”调度到集群中的不同节点执行。但是Spark实现的调度系统,并非一句话所概括的这么简单。Spark资源调度分为两层:第一层是ClusterManager(在YARN模式下为ResourceManager,在Mesos模式下为MesosMaster,在Standalone模式下为Master),将资源分配给Application;第二层是Appl...原创 2019-05-28 21:32:05 · 666 阅读 · 0 评论 -
Spark存储体系——Block传输服务
BlockTransferService是BlockManager的子组件之一,抽象类BlockTransferService有个实现类NettyBlockTransferService,BlockManager实际采用了NettyBlockTransferService提供的Block传输服务。为什么要把由Netty实现的网络服务组件也放到存储体系里,由于Spark是分布式部署的,每个Tas...原创 2019-05-28 20:42:06 · 716 阅读 · 0 评论 -
Spark存储体系——BlockManagerMaster对BlockManager的管理
BlockManagerMaster的作用是对存在于Executor或Driver上的BlockManager进行统一管理。Executor与Driver关于BlockManager的交互都依赖于BlockManagerMaster,比如Executor需要向Driver发送注册BlockManager、更新Executor上Block的最新信息、询问所需要Block目前所在的位置及当Execut...原创 2019-05-06 22:44:32 · 1529 阅读 · 0 评论 -
Spark存储体系——BlockInfoManager
1 Block锁的基本概念BlockInfoManager是BlockManager内部的子组件之一,BlockInfoManager对Block的锁管理采用了共享锁与排他锁,其中读锁是共享锁,写锁是排他锁。BlockInfoManager的成员属性有以下几个:infos:BlockId与BlockInfo之间映射关系的缓存 writeLocksByTask:每次任务执行尝试的标识T...原创 2019-04-08 23:07:26 · 632 阅读 · 0 评论 -
Spark存储体系
Spark的存储体系从Spark集群的横向角度看,贯穿了集群中的每个实例;从单个节点看,Spark的存储体系隶属于SparkEnv。在之前的分析中,BroadcastManager对广播对象进行广播时离不开存储体系的支持;除此之外,无论是SparkContext的初始化,还是任务的提交与执行,始终都离不开存储体系。Spark为了避免Hadoop频繁读写磁盘造成磁盘I/O成为性能瓶颈,优先会将配...原创 2019-04-06 15:03:11 · 629 阅读 · 0 评论 -
Spark存储体系——概述
简单来讲,Spark存储体系是各个Driver与Executor实例中的BlockManager所组成的;但是从一个整体来看,把各个节点的BlockManager看成存储体系的一部分,那存储体系就有了更多衍生的内容,比如块传输服务、map任务输出跟踪器、Shuffle管理器等。1存储体系架构先用下图从整体上表示存储体系架构根据上图可以看到,BlockManager依托于很多组件的...原创 2019-04-06 15:02:10 · 908 阅读 · 0 评论 -
Spark执行环境——输出提交协调器
当Spark应用程序使用了SparkSQL(包括Hive)或者需要将任务的输出保存到HDFS时,就会用到输出提交协调器OutputCommitCoordinator,OutputCommitCoordinator将决定任务是否可以提交输出到HDFS。无论是Driver还是Executor,在SparkEnv中都包含了子组件OutputCommitCoordinator。在Driver上注册了Out...原创 2019-04-05 17:26:52 · 700 阅读 · 0 评论 -
Spark执行环境——创建度量系统
在SparkEnv中,度量系统是必不可少的一个子组件,其创建代码如下://org.apache.spark.SparkEnvval metricsSystem = if (isDriver) { MetricsSystem.createMetricsSystem("driver", conf, securityManager)} else { conf.set("spark.ex...原创 2019-04-03 22:51:02 · 379 阅读 · 0 评论 -
Spark执行环境——map任务输出跟踪器
mapOutputTracker用于跟踪map任务的输出状态,此状态便于reduce任务定位map输出结果所在的节点地址,进而获取中间输出结果。每个map任务或者reduce任务都会有其唯一标识,分别为mapId和reduceId。每个reduce任务的输入可能是多个map任务的输出,reduce会到各个map任务所在的节点上拉取Block,这一过程叫做Shuffle。每次Shuffle都有唯一的...原创 2019-04-01 20:36:21 · 1280 阅读 · 0 评论 -
Spark执行环境——广播管理器BroadcastManager
BroadcastManager用于将配置信息序列化后的RDD、Job及ShuffleDependency等信息在本地存储,如果为了容灾,也会复制到其他节点上。创建BroadcastManager的代码实现如下://org.apache.spark.SparkEnvval broadcastManager = new BroadcastManager(isDriver, conf, sec...原创 2019-03-30 20:43:15 · 592 阅读 · 0 评论 -
Spark执行环境——序列化管理器SerializerManager
Spark中很多对象在通过网络传输或者写入存储体系时,都需要序列化。SparkEnv中有两个序列化的组件,分别是SerializerManager和closureSerializer,SparkEnv中创建它们的代码如下:val serializer = instantiateClassFromConf[Serializer]( "spark.serializer", "org.apac...原创 2019-03-30 13:54:50 · 788 阅读 · 0 评论 -
Spark执行环境——RPC环境
导读RpcEnv是Spark 2.x.x版本中新出现的组件,它是用来替代Spark 2.x.x以前版本中使用的Akka。Akka具有分布式集群下的消息发送、远端同步调用、远端异步调用、路由、持久化、监管、AtLeastOnceDelivery(至少投递一次)等能力,一旦Akka被替代,那就意味着RpcEnv必须也能支持这些机制。SparkEnv中创建RpcEnv的代码:priv...原创 2019-03-29 21:53:07 · 895 阅读 · 0 评论 -
Spark执行环境——安全管理器SecurityManager
SecurityManager主要对账号、权限及身份认证进行设置和管理。如果Spark的部署模式为YARN,则需要生成secret_key(密钥)并存入HadoopUGI;而在其它模式下,则需要设置环境变量_SPARK_AUTH_SECRET(优先级更高)或spark.lauthenticate.secret属性指定secret key(密钥)。SecurityManager还会给当前系统设置默...原创 2019-03-15 22:57:59 · 1763 阅读 · 0 评论 -
Spark执行环境
Spark对任务的计算都依托于Executor的能力,所有的Executor都有自己的Spark执行环境SparkEnv。有SparkEnv,就可以将数据存储在存储体系中;就能利用计算引擎对计算任务进行处理;在节点间进行通信等。SparkEnv还提供了多种多样的内部组件,实现不同的功能。SparkEnv是一个很重要的组件,虽然在创建SparkContext的时候也涉及它(只是因为local模式的需...原创 2019-03-15 21:52:07 · 357 阅读 · 0 评论 -
SparkContext剖析
1SparkContext概述SparkContext就Spark的入口,相当于应用程序的main函数。目前在一个JVM进程中可以创建多个SparkContext,但是只能有一个active级别。如果需要创建一个新的SparkContext实例,必须先调用stop()方法停掉当前active级别的SparkContext实例。图片来自Spark官网,可以看到SparkContext处...原创 2019-03-15 21:17:12 · 744 阅读 · 0 评论 -
Spark事件总线
Spark定义了一个特质ListenerBus,可以接收事件并且将事件提交到对应事件的监听器,其代码如下:private[spark] trait ListenerBus[L <: AnyRef, E] extends Logging { private[spark] val listeners = new CopyOnWriteArrayList[L] final def a...原创 2019-03-04 21:27:07 · 1013 阅读 · 0 评论 -
Spark内置的RPC框架
在Spark中很多地方都涉及网络通信,比如各个组件间的消息互通、用户文件与Jar包的上传、节点间的Shuffle过程、Block数据的复制与备份等。在Spark 0.x.x与Spark 1.6.0前的版本中,组件间的消息通信主要借助于Akka,使用Akka可以轻松地构建强有力的高并发与分布式应用。虽然Akka作为一款优秀的分布式通信框架,但在Spark 2.0.0版本中被移除了,Spark官网文...原创 2019-03-03 11:05:48 · 530 阅读 · 0 评论 -
Spark配置——SparkConf源码剖析
Spark配置任何优秀的软件或服务都会提供一些配置参数,这些配置参数有些是内置的,有些则是可以由用户配置的。Spark作为一款优秀的计算框架,也配置了各种各样的系统配置参数。SparkConf是Spark的配置类,这个类在Spark的历史版本中已经存在很久了,Spark中的每一个组件都直接或者间接地使用着它所存储的属性,这些属性都存储在如下的数据结构中:private val setti...原创 2019-02-20 23:19:51 · 571 阅读 · 0 评论