资源描述
基于Spark平台的GPU调度研究苏鹏飞ICT-HPC目录2动机现有编程模型(MapReduce)是一种非循环数据流抽象模型,不适用于需要重复使用数据集的应用:迭代计算(机器学习)交互式数据挖掘工具(R,Excel,Python)MapMapMapReduceReduceDiskInputDiskOutput特性 分布式内存抽象 支持数据延迟查询 支持比Map和Reduce更多的函数 提供交互式的Scala shell和Python shell 保留MapReduce优点 容错 数据局部性 可扩展性生态圈架构 数据存储 资源管理 计算架构sc=new SparkContextf=sc.textFile(“”)f.filter().count().programSpark client(app master/driver)Spark workerHDFS,HBase,Block managerTask threadsRDD graphSchedulerBlock trackerShuffle trackerClustermanagerRDD 全称:Resilient Distributed Datasets 容错的、只读的、分布式数据集 允许用户指定数据的存储级别(内存/外设)提供丰富的并行操作 Reduce Collect Count RDD 操作类型 变换(Transformation)不计算,仅返回新RDD 行动(Action)进行计算,返回新值给driver程序RDD 一个例子:日志挖掘lines=spark.textFile(“hdfs:/.”)errors=lines.filter(_.startsWith(“ERROR”)messages=errors.map(_.split(t)(2)cachedMsgs=messages.cache()Block 1Block 2Block 3WorkerWorkerWorkerDrivercachedMsgs.filter(_.contains(“foo”).countcachedMsgs.filter(_.contains(“bar”).count.tasksresultsCache 1Cache 2Cache 3Base RDDTransformed RDDCached RDDParallel operation对Wikipedia 全文搜索耗时 map.put(pair._1,pair._2)map Collect实现剖析def collect():ArrayT=val results=sc.runJob(this,(iter:IteratorT)=iter.toArray)Array.concat(results:_*)Collect实现剖析rdd.collect()RDD Objectsbuild operator DAGDAGSchedulersplit graph into stages of taskssubmit each stage as readyDAGTaskSchedulerTaskSetlaunch tasks via cluster managerretry failed or straggling tasksClustermanagerWorkerexecute tasksstore and serve blocksBlock managerThreadsTaskCollect实现剖析Collect实现剖析(接上)顺序顺序操作操作1sc.runJob-dagScheduler.runJob-submitJob2DAGScheduler:submitJob会创建JobSummitted的event发送给内嵌类eventProcessActor3在submitStage中会计算stage之间的依赖关系,依赖关系分为宽依赖宽依赖和窄依赖窄依赖两种4eventProcessActor在接收到JobSubmmitted之后调用processEvent处理函数5job到stage的转换,生成finalStage并提交运行,关键是调用submitStage6如果计算中发现当前的stage没有任何依赖或者所有的依赖都已经准备完毕,则提交task7提交task是调用函数submitMissingTasks来完成8task真正运行在哪个worker上面是由TaskScheduler来管理,也就是上面的submitMissingTasks会调用TaskScheduler:submitTasks9TaskSchedulerImpl中会根据Spark的当前运行模式来创建相应的backend,如果是在单机运行则创建LocalBackend10LocalBackend收到TaskSchedulerImpl传递进来的ReceiveOffers事件11receiveOffers-executor.launchTask-TaskRunner.run
展开阅读全文