spark源码分析
文章平均质量分 81
colossus_bigdata
大数据&微服务架构师
展开
-
spark源码学习(二)---Master源码分析(3)-master对driver、executor的调度
本文根据spark1.6源码。自己学习总结,错误之处请指正。schedule方法是资源调度的一个重要方法,当一个APp加入内存或者集群可用的资源发生变化的时候,就会调用该方法。该调度方法主要针对driver,worker,application的调度。首先获取所有可用的alive的worker,并将这个worker集合随机打乱,然后遍历获取等待调度的driver,如果worker的资源可以运行原创 2016-02-10 19:39:41 · 736 阅读 · 0 评论 -
spark源码阅读(十四)---sparkEnv类
sparkEnv为运行的spark实例(master,worker,executor等)持有运行环境相关的对象,sparkenv管理serializer, Akka actor system, block manager, map output tracker等对象。sparkEnv主要被内部使用,后面可能仅供内部使用。sparkEnv最重要的方法是createDriverEnv方法,该方法有三个原创 2016-04-07 13:06:00 · 717 阅读 · 0 评论 -
spark源码阅读(十三)---sparkConf类
sparkConf主要通过ConcurrentHashMap来维护各种spark的配置属性,加载以spark开头的属性。加载是通过system类来完成:if (loadDefaults) { // Load any spark.* system properties for ((key, value) <- Utils.getSystemProperties if原创 2016-04-07 11:59:38 · 1978 阅读 · 0 评论 -
spark源码学习(八)--- executor启动task分析
本文基于spark1.6。上一篇文章提到TaskScheduler将task与executor分配好以后,交给executor来运行task,本文分析executor运行task。首先,在收到消息后,executor向driver注册,这部分的注册是由CoarseGrainedExecutorBackend而不是executor类来完成的。首先来看该类的初始化: override def原创 2016-02-21 13:05:49 · 1952 阅读 · 0 评论 -
spark源码学习(七)--- TaskScheduler源码分析
上一篇文章中,当程序执行到submitMissingTask的时候,会调用taskScheduler.submitTasks(new TaskSet(tasks.toArray, stage.id, stage.latestInfo.attemptId, jobId, properties))这个方法,其中的tasks是一个seq集合,每个partition会创建一个Task(ShuffleMap原创 2016-02-20 23:18:57 · 550 阅读 · 0 评论 -
spark源码学习(六)--- DAGScheduler中的task的划分
前面的文章中,当执行到submitstage的方法中,会调用到submitMissingTasks(stage, jobId.get) 这个方法。 private def submitMissingTasks(stage: Stage, jobId: Int) { logDebug("submitMissingTasks(" + stage + ")") // Get ou原创 2016-02-20 18:25:45 · 665 阅读 · 0 评论 -
spark源码学习(五)--- DAGScheduler中的stage的划分
上一篇文章中,当sparkContext初始化完成,并且worker也反向注册回来之后,程序代码开始运行,当遇到一个action操作的时候,该action函数会调用runjob函数,runjob最周会调用到DAGScheduler。本文将分析下面的DAGScheduler将一个job划分成若干个stage,每个stage又会分成若干个task,对与每个partition都会启动一个task,每个t原创 2016-02-20 15:56:19 · 1561 阅读 · 0 评论 -
spark源码学习(二)---Master源码分析(1)-master的主备切换机制
1.spark master HA 机制概览与hadoop一样,spark也存在单点故障问题,为此,spark的standalone模式提供了master的HA,与hadoop一样,一个是active,一个是standby状态,当active挂了,standby会顶上。spark HA的主备切换主要基于两种机制:基于文件系统和基于zk集群。前者在挂了后需要手动切换,而基于zk的HA可以自动实现原创 2016-02-03 23:24:12 · 1286 阅读 · 1 评论 -
spark源码学习(一)---sparkContext(2)
前面分析了sparkContext的TaskScheduler的启动过程,大致过程是创建一个TaskScheduler和一个SchedulerBackend,SchedulerBackend做为TaskScheduler的底层组件使用,TaskScheduler与master的交互都通过该组件完成。SchedulerBackend构造一个appdesc传给APPClient,AppClient会将原创 2016-02-03 22:08:25 · 686 阅读 · 1 评论 -
spark源码学习(一)---sparkContext(1)
一个sparkContext代表了一个连接到spark cluster的一个connection。sparkContext用来创建RDD,accumulators和broadcast变量,每个jvm只有一个sparkContext,这个限制后面可能不再适用。参见SPARK-2243。在我们的程序中通常构造一个sparkConf,然后用该sparkConf来构造SparkContext,任何对s原创 2016-02-02 23:26:52 · 1136 阅读 · 0 评论 -
spark源码学习(十二)--- checkpoint机制分析
checkpoint原理:上篇cacheManager源码分析文章中提到,当RDD使用cache机制从内存中读取数据,如果数据没有读到,会使用checkpoint机制读取数据。此时如果没有checkpoint机制,那么就需要找到父RDD重新计算数据了,因此checkpoint是个很重要的容错机制。checkpoint就是对于一个RDD chain,如果中间某些中间结果RDD,后面需要反复使原创 2016-03-03 21:33:00 · 1421 阅读 · 0 评论 -
spark源码学习(二)---Master源码分析(2)-master内组件状态改变机制
本篇学习master里面几个组件状态改变时发生的事情,自己写自己看,不对之处请拍砖。首先,来看driver的状态改变: case DriverStateChanged(driverId, state, exception) => { state match { //如果driver的状态是ERROR,Finished,killed,或者Failed原创 2016-02-09 13:24:03 · 752 阅读 · 0 评论 -
spark源码学习(十一)---cacheManager分析
cacheManager的分析要从RDD说起,当读取数据的时候,调用RDD的iterator方法的时候,如果storeRageLevel不是none,那么说明之前进行过RDD的持久化,就不需要从从父RDD执行以获取数据,优先使用cacheManager获取持久化的数据。 final def iterator(split: Partition, context: TaskContext): I原创 2016-03-03 20:08:56 · 883 阅读 · 0 评论 -
spark源码学习(十)--- blockManager分析
blockManager主要原理:blockmanager位于org.apache.spark.storage中,包含四个重要的组件:DiskStore,MemoryStore,Blocktransferservice,ConnectionManager。其中,diskStore负责对磁盘上的数据读写;memoryStore负责内存数据的读写,connectionManager负责到远程节点的原创 2016-03-03 11:56:41 · 4957 阅读 · 0 评论 -
spark源码学习(九)--- shuffle过程源码分析
shuffle过程是spark运算的重要过程,也是spark调优的关键地方之一,在spark中的reduceByKey,groupByKey,sortByKey,countByKey,join,cogroup等操作时,都会触发shuffle过程。shuffle过程发生在shuffleMapTask与resultTask之间,当shuffleMapTask的输出数据先放到内存bucket中,buck原创 2016-03-02 21:20:01 · 914 阅读 · 0 评论 -
spark源码学习(四)---job执行分析
在sparkRDD操作中,分为Transformation和action,Transformation是lazy操作,不会触发job,作业里的每个案出庭操作都会触发一个job,下面分析spark 从读取到计算的完整操作过程。在spark任务的代码里,在执行初始化sparkContext后,sparkContext调用textFile读取hadoop里的文件,下面分析读取过程: def t原创 2016-02-12 12:40:01 · 674 阅读 · 0 评论 -
spark源码学习(三)---worker源码分析-worker启动driver、executor分析
本文根据spark1.6源码。worker位于org.apache.spark.deploy.worker包下,本文分析worker对driver和executor的启动过程。前文分析中,当schedule方法会调用master的launchDriver方法以便启动driver: private def schedule(): Unit = { //如果当前的master处于st原创 2016-02-11 12:42:06 · 997 阅读 · 0 评论 -
spark源码阅读(十五)--securityManager
securityManager主要用于权限设置,比如在使用yarn作为资源调度框架时,用于生成secret key进行登录。该类默认只用一个实例,所以的app使用同一个实例,下面是该类的所有源代码:private[spark] class SecurityManager(sparkConf: SparkConf) extends Logging with SecretKeyHolder {原创 2016-04-07 13:27:02 · 1802 阅读 · 0 评论