Spark RunTime内幕解密
来源:互联网 发布:路旁的叶修写真集淘宝 编辑:程序博客网 时间:2024/05/17 23:34
第26课:SparkRuntime内幕解密
本期内容:
1 再论Spark集群部署
2Job提交解密
3Job的生成和接受
4Task的运行
5 再论Shuffle
一、再论Spark集群部署
1、从Spark Runtime的角度来讲由五大核心对象:Master、Worker、Executor、Driver、CoarseGrainedExecutorBackend;
2、Spark在做分布式集群系统设计的时候,最大化功能独立,模块化封装具体独立的对象、强内聚弱耦合;
3、当Driver中的SparkContext初始化的时候会提交程序给Master,Master如果接受该程序在Spark中运行的话,就会为当前程序分配APPID,同时会分配具体的计算资源,需要特别注意的是:Master是根据当前提交程序的配置信息来给集群中的Worker发指令分配具体的计算资源,但是,Master发出指令后并不关心具体的资源是否已经分配,也就是说Master是发指令后就记录了分配的资源,以后客户端再次提交其他的程序的话就不能使用该资源了,其弊端就是可能会导致其他要提交的程序无法分配到本来应该可以分配到的计算资源,最终的优势在Spark分布式系统功能弱耦合的基础上最快的运行系统(否则如果Master要等到资源最终分配成功后才通知Driver的话,就会造成Driver阻塞,不能够最大化的并行计算资源的使用率)。
注:Spark在默认情况下由于机器中一般都只有一个Application在运行,所有Master分配资源的策略的弊端就没有那么明显了。
二、Job提交提交的过程源码解密
运行作业Wordcount
1、一个非常重要的技巧是通过Spark shell中运行一个Job提交的过程, 然后在用源码辅助验证
2、在Spark中所有的action都会触发一个Job,在上述代码中是通过saveAsTextFile来触发Job的,DAGScheduler在实例化的过程中是ExecutorBackend,
3、SparkContext在实例化的时候会构造SparkDeploySchedulerBackend、DAGScheduler、TaskSchedulerLmpl等对象,其中SparkDeploySchedulerBackend负责集群计算资源的管理和调度,DAGScheduler辅助高层调度(例如Job中Stage的划分、数据本地性等内容),TaskSchedulerlmple负责Stage内部的底层调度(例如具体每个Task的调度、Task的容错等),MapOutputTrackerMaster负责Shuffle中数据
private[spark] sealed trait MapOutputTrackerMessageprivate[spark] case class GetMapOutputStatuses(shuffleId: Int) extends MapOutputTrackerMessageprivate[spark] case object StopMapOutputTracker extends MapOutputTrackerMessage /** RpcEndpoint class for MapOutputTrackerMaster */private[spark] class MapOutputTrackerMasterEndpoint( override val rpcEnv: RpcEnv, tracker: MapOutputTrackerMaster, conf: SparkConf) extends RpcEndpoint with Logging { val maxAkkaFrameSize = AkkaUtils.maxFrameSizeBytes(conf)
三、Task的运行解密:
1、Task是运行在Executor中,而Executor又是位于CoarseGrainedExecutorBackend中的,且CoardeGrainedExecutorBackend和Executor是一一对应的。
private def launchTasks(tasks: Seq[Seq[TaskDescription]]) { for (task <- tasks.flatten) { val serializedTask = ser.serialize(task) if (serializedTask.limit >= akkaFrameSize - AkkaUtils.reservedSizeBytes) { scheduler.taskIdToTaskSetManager.get(task.taskId).foreach { taskSetMgr => try { var msg = "Serialized task %s:%d was %d bytes, which exceeds max allowed: " + "spark.akka.frameSize (%d bytes) - reserved (%d bytes). Consider increasing " + "spark.akka.frameSize or using broadcast variables for large values." msg = msg.format(task.taskId, task.index, serializedTask.limit, akkaFrameSize, AkkaUtils.reservedSizeBytes) taskSetMgr.abort(msg) } catch { case e: Exception => logError("Exception in error callback", e) } }。
2、当CoardeGrainedExecutorBackend接收到TaskSetManager发过来的LaunchTasks消息。
补充说明:LaunchTask是一个cassclass。
DT大数据梦工厂
新浪微博:www.weibo.com/ilovepains/
微信公众号:DT_Spark
博客:http://.blog.sina.com.cn/ilovepains
TEL:18610086859
Email:18610086859@vip.126.com
- Spark RunTime内幕解密
- spark Runtime内幕解密
- Spark Runtime内幕
- Spark Runtime内幕
- Spark Broadcast内幕解密
- spark executor内幕解密
- spark Broadcast 内幕解密
- Spark Shuffle内幕解密
- Spark Runtime解密
- 第26课: Spark Runtime(Driver、Masster、Worker、Executor)内幕解密
- Spark 2.0内幕深度解密
- spark shuffle 内幕彻底解密
- Spark Sort-Based Shuffle内幕彻底解密
- spark Hash Shuffle内幕彻底解密
- spark sql下parquet内幕解密
- Spark SQL下Parquet内幕深度解密
- Spark SQL下Parquet内幕深度解密
- Spark Sort-Based Shuffle内幕彻底解密
- 如何shutdown JBoss AS 7 server
- 使用putty在linux主机和windows主机之间拷贝文件(已测试可执行)
- [hdu4453]looploop [treap/splay]
- jQuery4(Dom与jQuery对象的相互转换)
- uva796 Critical Links(求桥并按边输出)
- Spark RunTime内幕解密
- 蓝桥杯 历届试题 地宫取宝
- WD西部数据移动硬盘官方真伪查询
- Ubuntu15.10 使用wine安装并运行qq
- hdu3665(最短路)
- Unity插件_____DoTween(一)
- static 后期静态绑定
- 利用github搭建个人小站
- C# 基础加强(一)可变参数params、索引器