![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spark
文章平均质量分 71
spark 开发,源码分析,性能调优
画画的老顽童
这个作者很懒,什么都没留下…
展开
-
dmp广告系统
dmp广告系统原创 2022-08-26 14:04:54 · 1282 阅读 · 0 评论 -
spark sql源码分析
入口方法 SQLContext.sql def sql(sqlText: String): DataFrame = { if (conf.dialect == "sql") { /** * 调用sqlParser组件针对sql语句生成一个Unresolved logicalPlan * 将Unresolved LogicalPlan 和sqlContext自身的实例封装为一个dataframe * 返回给用户,这里仅仅封装了sql语句的原创 2020-11-08 21:52:42 · 156 阅读 · 0 评论 -
Checkpoint源码分析
Checkpoint,是Spark提供的一个比较高级的功能。有的时候啊,比如说,我们的Spark应用程序,特别的复杂,然后呢,从初始的RDD开始,到最后整个应用程序完成,有非常多的步骤,比如超过20个transformation操作。而且呢,整个应用运行的时间也特别长,比如通常要运行1~5个小时。在上述情况下,就比较适合使用checkpoint功能。因为,对于特别复杂的Spark应用,有很高的风险,会出现某个要反复使用的RDD,因为节点的故障,虽然之前持久化过,但是还是导致数据丢失了。那么也就是说,出现失原创 2020-11-08 17:38:41 · 137 阅读 · 0 评论 -
CacheManager 源码分析
RDD.iterator final def iterator(split: Partition, context: TaskContext): Iterator[T] = { // TODO getOrCompute 如果StorageLevel不为NONE,之前持久化过RDD,那么就不要直接去从父RDD执行算子,计算新的RDD的partition了 // 优先尝试使用CacheManager,去获取持久化的数据 if (storageLevel != StorageLeve原创 2020-11-08 16:57:07 · 171 阅读 · 0 评论 -
BlockManager源码分析
BlockManagerMasterActor/** * 负责维护各个executor的blockManager的元数据: * blockManagerInfo,BlockStatus */private[spark] class BlockManagerMasterActor(val isLocal: Boolean, conf: SparkConf, listenerBus: LiveListenerBus) extends Actor with ActorLogReceive with原创 2020-11-08 15:33:28 · 216 阅读 · 0 评论 -
Spark Shuffle源码分析
task.run.runTask->ShuffleMapTask.runTask->writer.writewriter 有 HashShuffleWriter和SortShuffleWriter本章分析 HashShuffleWriterShuffle Write /** * Write a bunch of records to this task's output * 将每个shuffleMapTask计算出来的新的RDD的partition数据写入本地磁盘原创 2020-11-07 23:49:47 · 121 阅读 · 0 评论 -
Task源码分析
Executor.launchTask.threadPool.execute(tr) 执行TaskRunner.run方法 // TODO 执行task真正的业务逻辑 override def run() { val deserializeStartTime = System.currentTimeMillis() Thread.currentThread.setContextClassLoader(replClassLoader) // 获取序列化器原创 2020-11-07 21:29:11 · 187 阅读 · 0 评论 -
Executor源码分析
接上篇 https://blog.csdn.net/m0_46449152/article/details/109550503CoarseGrainedSchedulerBackend向Executor发送LaunchTaskCoarseGrainedExecutorBackend接收到LaunchTask // TODO driveractor 发送给executor的消息, 让executor 启动task case LaunchTask(data) => if (原创 2020-11-07 19:54:47 · 66 阅读 · 0 评论 -
TaskScheduler源码分析
接上篇DAGScheduler.submitMissingTasks.taskScheduler.submitTasksTaskSchedulerImpl /** * TaskScheduler提交tasks任务的入口 */ override def submitTasks(taskSet: TaskSet) { val tasks = taskSet.tasks logInfo("Adding task set " + taskSet.id + " with " +原创 2020-11-07 19:11:30 · 137 阅读 · 0 评论 -
DagScheduler源码分析
action 操作触发sparkcontext的runjob方法dagScheduler.runJobdagScheduler.submitJobDAGSchedulerEventProcessLoop.onReceive(case JobSubmitted(handleJobSubmitted))handleJobSubmitted //DagScheduler调度的核心入口使用触发job的最后一个rdd,创建finalStage,创建一个Stage对象,并将stage加入DAGSchedu原创 2020-11-07 17:45:07 · 107 阅读 · 0 评论 -
Spark Worker源码分析
一 、LaunchDriver创建driverRunner内部启动一个线程(driverRunner.start)启动DriverRunner创建driver的工作目录构建ProcessBuilder,传入了driver的启动命令,需要的内存大小等信息启动driver二、LaunchExecutor1、创建executor的工作目录2、创建ExecutorRunner3、内部启动一个线程(ExecutorRunner.start)启动ExecutorRunner调用fetchAndR原创 2020-11-07 14:37:30 · 121 阅读 · 0 评论 -
Spark Master 源码分析
schedule源码Random.shuffle 对状态为alive的woker,调用Random.shuffle方法进行随机打乱driver调度Application的调度spreadOutApps算法 : 平均分配,尽量打散非spreadOutApps算法: 尽可能少的分配到worker上 , 尽量集中 private def schedule() { if (state != RecoveryState.ALIVE) { return } /**原创 2020-11-06 22:58:34 · 121 阅读 · 0 评论 -
SparkContext 源码分析
sparkcontext 源码分析/** * 1、底层通过操作一个schedulerbackend,针对不同种类的cluser(standalone、yarn)调度task * 2、它也可以通过使用一个localbackend,并且将islocal参数设置为true,在本地模式执行 * 3、它负责一些通用的逻辑,比如说决定多个job的调度顺序,启动推测任务执行 * 4、客户端首先应该调用它的initialize()方法和start()方法,然后通过runtask方法提交taskset */pr原创 2020-11-03 22:30:38 · 121 阅读 · 0 评论 -
Spark standalone启动和submit源码分析
Masterorg.apache.spark.deploy.master.Mastermain -> startSystemAndActor -> val actor = actorSystem.actorOf( Props(classOf[Master], host, boundPort, webUiPort, securityMgr, conf), actorName) 创建actor master -> Master的构造方法和prestart->原创 2021-03-04 08:39:17 · 176 阅读 · 1 评论 -
spark 总体架构
spark 架构1、执行流程Spark-submit 提交application,driver先构造sparkconf,再构造sparkcontext,sparkcontext构造DAGScheuler和TaskScheduler,TaskScheduler通过他的后台进程连接master,向master注册applicationMaster接收到application的注册请求后,使用自己的资源调度算法,在spark集群的worker上为这个application启动多个executorEx原创 2021-03-04 08:48:45 · 179 阅读 · 3 评论