关于driver
用户提交的应用程序代码在spark中运行起来就是一个driver,用户提交的程序运行起来就是一个driver,
他是一个一段特殊的excutor进程,这个进程除了一般excutor都具有的运行环境外,这个进程里面运行着
DAGscheduler Tasksheduler Schedulerbackedn等组件。
这段计算π值的程序代码在spark上运行起来就是一个driver,可以看到这段程序里有个main函数,它是整个应用程序的开始,
也可以看到在这段代码中创建了context,这样与官网给的解释就完全对上了。
一个应用程序是如何与一个driver一一对应的呢?
在worker.scala中我们找到了创建driver的代码,一步步往上追溯就能发现一个Driver如何与一个应用程序一一对应起来的
driver做什么
1)运行应用程序的main函数
2)创建spark的上下文
3)划分RDD并生成有向无环图(DAGScheduler)
4)与spark中的其他组进行协调,协调资源等等(SchedulerBackend)
5)生成并发送task到executor(taskScheduler)
driver运行在哪里(在这里只讨论yarn模式)
There are two deploy modes that can be used to launch Spark application on Yarn.In cluster mode,
the Spark driver run inside an application master process.And in the client mode,the driver runs in the client process.
yarn-cluster模式下,client将用户程序提交到到spark集群中就与spark集群断开联系了,此时client将不会发挥其他任何作用,仅仅负责提交。
在此模式下。AM和driver是同一个东西,但官网上给的是driver运行在AM里,可以理解为AM包括了driver的功能就像Driver运行在AM里一样,
此时的AM既能够向AM申请资源并进行分配,又能完成driver划分RDD提交task等工作
yarn-client模式下
yarn-client模式下,Driver运行在客户端上,先有driver再用AM,此时driver负责RDD生成、task生成和分发,向AM申请资源等 ,AM负责向RM申请资源,
其他的都由driver来完成.
总结
用户提交的程序运行起来就是一个driver,他是一个一段特殊的excutor进程,这个进程除了一般excutor都具有的运行环境外,
这个进程里面运行着DAGscheduler Tasksheduler Schedulerbackedn等组件
yarn-Cluster模式下driver运行在AM里,这个AM既完成划分RDD生成有向无环图提交task等任务也负责管理与这个application运行有关的executor
yarn-Client模式下由AM负责管理excutor其余的由driver完成。