1、Spark集群的体系结构
官方的一张图:
组件
Spark应用程序在群集上作为独立的进程集运行,由SparkContext 主程序中的对象(称为驱动程序)协调。
具体来说,要在集群上运行,SparkContext可以连接到几种类型的集群管理器 (Spark自己的独立集群管理器Mesos或YARN),它们可以在应用程序之间分配资源。连接后,Spark会在集群中的节点上获取执行程序,这些节点是运行计算并为您的应用程序存储数据的进程。接下来,它将您的应用程序代码(由传递给SparkContext的JAR或Python文件定义)发送给执行者。最后,SparkContext将任务发送给执行程序以运行。
关于此体系结构,有几点有用的注意事项:
- 每个应用程序都有其自己的执行程序进程,这些进程在整个应用程序期间保持不变,并在多个线程中运行任务。这样的好处是可以在调度方面(每个驱动程序调度自己的任务)和执行者方面(来自不同应用程序的任务在不同的JVM中运行)彼此隔离应用程序。但是,这也意味着,如果不将数据写入外部存储系统,则无法在不同的Spark应用程序(SparkContext实例)之间共享数据。
- Spark与基础群集管理器无关。只要它可以获取执行程序进程,并且它们彼此通信,即使在还支持其他应用程序(例如Mesos / YARN)的集群管理器上运行它,也相对容易。
- 驱动程序在其整个生命周期中必须侦听并接受其执行程序的传入连接(例如,请参见网络配置部分中的spark.driver.port)。因此,驱动程序必须是可从工作程序节点访问的网络。
- 由于驱动程序在群集上调度任务,因此应在工作节点附近运行,最好在同一局域网上运行。如果您想将请求远程发送到集群,最好是将RPC打开到驱动程序,并让它在附近提交操作,而不是在远离工作节点的地方运行驱动程序。
2.自己画的一张图:
————保持饥饿,保持学习
Jackson_MVP