为了调试python脚本在spark-sumit时要注意的事项,网上查了一通资料
然后发现了这篇
Spark的driver理解和executor理解
又是图又是代码的讲了好多,
其实开头那个图已经有核心要点了
图中每一个白背景黑线框就是对应物理机器的粒度
图上没有说到的,是driver program的位置会因为提交作业时的deploy-mode参数和cluster manager 的调度策略而变动
要理解和记住这些也不复杂
- 当spark-submit没有提供deploy-mode参数,或者设置为–deploy-mode client时,driver program就在你执行spark-submit的机器上
- 当spark-submit的设置为–deploy-mode cluster时,driver program运行在spark-submit命令中连接的cluster里,其中某一个worker node上,在driver启动前并不固定是哪一个,driver启动后不变
- worker node在cluster manager的调度策略和自身资源满足的前提下,是可以同时存在driver program和executor的,甚至可以一个worker node上同时存在多个executor
- 这种设计是因为driver program与多个executor之间要有通信往来。在实际生产环境中,能执行spark-submit的机器和spark集群所在的网络位置甚至物理距离都可以隔很远,如果在执行spark-submit的位置部署driver program非常低效,不如让spark在集群内找一个worker node来部署driver program, 快很多。