第13课 spark内核架构解密学习笔记 2016.01.16
内容:
1.通过手动绘图的方式解密spark内核架构
2.通过案例验证spark内核架构
3.spark架构思考
第一阶段:彻底精通spark
第二阶段:价值千万超大型spark项目:包含所有spark知识点,编码,测试
driver是运行程序时具有main方法并创建了spark context的环境对象。如果要看一段程序是否是Driver的话,就要看其内部是否有运行Application的main函数/方法,并且一定会创建SparkContext。sparkContext是通往集群的唯一入口,也是开发者使用Spark集群各种功能的唯一通道,SparkContext是整个程序运行调度的核心。注意:是程序运行调度的核心而不是资源调度的核心。SparkContext里有高层调度器和底层调度器。高层调度器就是把整个作业划分成几个阶段,底层调度器是每个阶段里的任务该如何处理;
SchedulerBackend是管理整个集群中为当前程序分配的计算资源(Executor)。
这里讲的Standalone模式。原因:
1)这是Spark自带的。
2)效率比在Yarn和Mesos上高很多,也不需要其他的内容
3)只要Spark一个框架就可以了。
SparkContext里有高层调度器、低层调度器、SchedulerBackend
SparkContext在创建这些对象的同时会向Master注册当前程序,注册OK后会分配资源,根据Action触发的JOB,JOB里有RDD,从后往前推,如果有宽依赖的话,就划分成不同的Stage。stage划分完成后提交给底层调度器TaskScheduler。
一个Stage内部都是计算轮回完全一样,只是计算的数据不同而已。
TaskScheduler拿到任务的集合,就会根据数据的本地性把任务发到Executor执行。
Executor在出问题时会向Driver汇报。运行完后SparkContext会关闭。当然创建的对象也都会关闭。
Driver是应用程序运行调度的核心,因为它负责了整个作业的调度,并且会向Master申请资源来完成具体作业的工作过程。
应用程序就是用户编写的Spark程序及打包后的依赖,包含driver功能的代码和分布在集群中多个节点上的Executor的代码。
应用程序有两个层面,application=driver+executor
Driver是驱动Executor工作的,Executor是具体处理数据分片的,内部是线程池并发地处理数据分片。
应用程序是Driver和Executors的模式,每个应用程序都有Executor代码。
Executor部分代码其实就是main方法中new SparkConf,SparkConf进行配置然后创建SparkContext。这些就是driver部分的代码。
Driver部分的代码:SparkConf+SparkContext
val conf = new SparkConf()
conf.setAppName(“...”)
conf.setMaster(“local”)
cal sc = new SparkContext(conf)
SparkContext创建的过程中做了很多内容,包括DAG Scheduler、TaskScheduler、SchedulerBackend、SparkEnv
textFile flatMap map reduceByKey:这些代码都是Transformation级别的,都会产生RDD,既是RDD操作又会产生RDD,这些代码就是具体的业务实现,就是Executor中具体执行的代码。最后都会被Action触发执行,都是在Worker中的Executor中处理的。
一个应用程序默认只有一个DAG Scheduler。
sparkContext/Spark
driver是以sparkContext为核心的,可以理解为driver就是sparkContext
内容:
1.通过手动绘图的方式解密spark内核架构
2.通过案例验证spark内核架构
3.spark架构思考
第一阶段:彻底精通spark
第二阶段:价值千万超大型spark项目:包含所有spark知识点,编码,测试
driver是运行程序时具有main方法并创建了spark context的环境对象。如果要看一段程序是否是Driver的话,就要看其内部是否有运行Application的main函数/方法,并且一定会创建SparkContext。sparkContext是通往集群的唯一入口,也是开发者使用Spark集群各种功能的唯一通道,SparkContext是整个程序运行调度的核心。注意:是程序运行调度的核心而不是资源调度的核心。SparkContext里有高层调度器和底层调度器。高层调度器就是把整个作业划分成几个阶段,底层调度器是每个阶段里的任务该如何处理;
SchedulerBackend是管理整个集群中为当前程序分配的计算资源(Executor)。
这里讲的Standalone模式。原因:
1)这是Spark自带的。
2)效率比在Yarn和Mesos上高很多,也不需要其他的内容
3)只要Spark一个框架就可以了。
SparkContext里有高层调度器、低层调度器、SchedulerBackend
SparkContext在创建这些对象的同时会向Master注册当前程序,注册OK后会分配资源,根据Action触发的JOB,JOB里有RDD,从后往前推,如果有宽依赖的话,就划分成不同的Stage。stage划分完成后提交给底层调度器TaskScheduler。
一个Stage内部都是计算轮回完全一样,只是计算的数据不同而已。
TaskScheduler拿到任务的集合,就会根据数据的本地性把任务发到Executor执行。
Executor在出问题时会向Driver汇报。运行完后SparkContext会关闭。当然创建的对象也都会关闭。
Driver是应用程序运行调度的核心,因为它负责了整个作业的调度,并且会向Master申请资源来完成具体作业的工作过程。
应用程序就是用户编写的Spark程序及打包后的依赖,包含driver功能的代码和分布在集群中多个节点上的Executor的代码。
应用程序有两个层面,application=driver+executor
Driver是驱动Executor工作的,Executor是具体处理数据分片的,内部是线程池并发地处理数据分片。
应用程序是Driver和Executors的模式,每个应用程序都有Executor代码。
Executor部分代码其实就是main方法中new SparkConf,SparkConf进行配置然后创建SparkContext。这些就是driver部分的代码。
Driver部分的代码:SparkConf+SparkContext
val conf = new SparkConf()
conf.setAppName(“...”)
conf.setMaster(“local”)
cal sc = new SparkContext(conf)
SparkContext创建的过程中做了很多内容,包括DAG Scheduler、TaskScheduler、SchedulerBackend、SparkEnv
textFile flatMap map reduceByKey:这些代码都是Transformation级别的,都会产生RDD,既是RDD操作又会产生RDD,这些代码就是具体的业务实现,就是Executor中具体执行的代码。最后都会被Action触发执行,都是在Worker中的Executor中处理的。
一个应用程序默认只有一个DAG Scheduler。
sparkContext/Spark
driver是以sparkContext为核心的,可以理解为driver就是sparkContext