spark 框架分析 (一)
来源:互联网 发布:淘宝制作假护照 编辑:程序博客网 时间:2024/06/06 07:13
spark代码中主要的一个基础组件是akka,akka使用Actor模式,是一个轻量级并发组件,基于事件驱动的receive循环处理消息,能和其他actors交互信息
这一部分以standalone-cluster部署模式分析spark框架,以一个小的spark app程序为例来分析流程
import org.apache.spark.SparkContextimport org.apache.spark.SparkContext._object SimpleApp { def main(args: Array[String]) { val textFile = "/home/snowman/kexueguairen.txt" // Should be some file on your system val sc = new SparkContext("spark://sparkmaster:7077", "Simple App", "<$SPARK_HOME>", List("file:///home/snowman/test/target/scala-2.10/simple-project_2.10-1.0.jar")) val numThes = sc.textFile(textFile,2).filter(line => line.contains("the")).count() println("Lines with the: %s".format(numThes)) }}
使用standalone-cluster模式启动,分别启动master和slave worker,每一个master和worker都是一个akka actor
spark app中一个很重要的类是SparkContext, 执行app时,SparkContext会根据部署模式创建TaskScheduler和SchedulerBackend,对于standalone-cluster模式,使用的是ClusterScheduler和SparkDeploySchedulerBackend(是CoarseGrainedSchedulerBackend的子类,也是一个akka actor),SparkDeploySchedulerBackend在启动时会创建一个Client(也是一个akka actor),然后通过actor之间的消息传递,指导每一个worker创建一个CoarseGrainedExecutorBackend,CoarseGrainedExectorBackend会在SparkDeploySchedulerBackend上注册executor,然后得到反馈创建executor
rdd是spark的核心类,是大数据处理的基础。spark的rdd根据不同的操作有众多rdd子类,比如MappedRDD, FilteredRDD, CoGroupedRDD, HadoopRDD, MappedValuesRDD, PipedRDD, CartesianRDD, BlockRDD等等。rdd之间有依赖关系的记录,主要有NarrowDependency和ShuffleDependency两种,NarrowDependency是指当前rdd partition有固定的parent rdd partition依赖,例如map, filter等,而ShuffleDependency则有可能依赖前面所有的rdd partitions,例如没有使用partitioner的join等。如上例的程序会构造FilterRDD。在做transform时并不会进行实际的计算,只有在遇到count, save, savetofile, collecte等action时,才会触发真正的计算执行
计算时,SparkContext运行job,调用DAGScheduler的submitJob提交任务,DAGScheduler使用eventqueue模式工作, 对提交的任务划分stage,stage的划分基于shuffle的边界,有shuffle map stage和result stage两种。对于cluster模式会将stage提交,这时递归计算依赖的stage并提交,如果没有依赖的stage,会根据stage的类型构造两种task,一种是ShuffleMapTask,另一种是ResultTask, task是基于parititon划分的,所以是可以并行的,将tasks归为一个taskset提交给clusterscheduler
ClusterScheduler将taskset加入到一个调度池中,然后启动后端的reviveOffers,调度器会根据资源的情况将task和运行需要的资源对应起来,然后通过CoarseGrainedExecutorBackend启动task,这时executor就会真正run task,task是通过序列化反序列化来传递的
- spark 框架分析 (一)
- spark异常分析(一)
- spark core源码分析5 spark提交框架
- spark 1.6.0 core源码分析5 spark提交框架
- Spark快速大数据分析-Spark介绍(一)
- spark源码阅读一-spark-mongodb代码分析
- spark源码阅读一-spark读写文件代码分析
- spark源码阅读一-spark读写hbase代码分析
- Spark的standalone源码分析(一)
- Spark源码分析(一)作业提交
- spark streaming应用场景(一) 日志分析
- spark大数据分析(一)
- Spark SQL 处理流程分析 (一)
- Spark的存储分析过程(一)
- OGRE框架分析(一)
- Yii PHP 框架分析 (一)
- Yii PHP 框架分析 (一)
- skynet框架 源码分析 一
- BD-rate计算方法
- ssh server 保持会话设置
- 上传app到AppStore的全流程
- URAL1056(树的直径)
- 文件不小心彻底删除了怎么恢复
- spark 框架分析 (一)
- Android 具有反弹效果的ScrollView
- windows下查看某个端口被哪个程序占用的方法
- C# thread的join方法使用解析
- BCD码
- JAVA的StringBuffer类
- 经典c程序(0022)---杂乱的5X5的数组变盘蛇形
- 做一个接收的缓冲,cup空闲时刻处理缓冲数据
- 你是否混谈MVC和三层?