![bdc96cc8a37ec4132c7f3cd928959e70.png](https://i-blog.csdnimg.cn/blog_migrate/7af8373070fdc61e9d16b65aa263a2ac.jpeg)
本篇简单介绍Spark如何在集群中运行,从而可以更好的理解各个组件的关系,会涉及到Driver、Executor、Job、Stage、Task等基本概念。
1 组件
Spark应用都是独立的运行在集群中,通过主程序(Driver程序)中的SparkContext进行任务的协调。目前Spark支持在多种集群中运行,比如Spark Standalone, mesos, yarn等。当用户启动程序并与集群连接后,spark会在集群中申请executor节点,executor会执行用户的代码并为应用存储数据。接下来会把运行代码时需要的资源上传到executor所在的节点,比如通过sparkContext把jar包或者python文件分发到executor。最后SparkContext发送Task任务到executor开启执行。
![b0d892f34e4bf98d9abce8cfb9a2d4b4.png](https://i-blog.csdnimg.cn/blog_migrate/6270d00645a5a32aa504fa89def5e0db.png)
注意在上面的架构中有几点比较重要:
- 每个应用都会有自己的executor进程,他们在应用运行期间会长期存活,并且通过多线程的方式执行任务。这样无论是在 driver的调度端还是executor的执行端,Spark应用都会彼此隔离互不干扰。不过这样