Spark 注重建立良好的生态系统,它不仅支持多种外部文件存储系统,提供了多种多样的集 群运行模式。部署在单台机器上时,既可以用本地(Local)模式运行,也可以使用伪分布式模式来运行;当以分布式集群部署的时候,可以根据自己集群的实际情况选择 Standalone 模式(Spark 自带的模式)、YARN-Client 模式或者 YARN-Cluster 模式。Spark 的各种运行模式 虽然在启动方式、运行位置、调度策略上各有不同,但它们的目的基本都是一致的,就是在 合适的位置安全可靠的根据用户的配置和 Job 的需要运行和管理 Task。
1、Spark On StandAlone 运行过程
Standalone 模式是 Spark 实现的资源调度框架,其主要的节点有 Client 节点、Master 节点和 Worker 节点。其中 Driver 既可以运行在 Master 节点上中,也可以运行在本地 Client 端。当 用 spark-shell 交互式工具提交 Spark 的 Job 时,Driver 在 Master 节点上运行;当使用 spark-submit.sh 工具提交 Application 或者在 Eclipes、IDEA 等开发平台上使用 new SparkConf().setMaster(“spark://master:7077”)方式运行 Spark 任务时,Driver 是运行在本地 Client 端上的。
运行过程文字说明
1、我们提交一个任务,任务就叫 Application
2、初始化程序的入口 SparkContext: 2.1 初始化 DAG Scheduler 2.2 初始化 Task Scheduler
3、Task Scheduler 向 master 去进行注册并申请资源(CPU Core 和 Memory)
4、Master 根据 SparkContext 的资源申请要求和 Worker 心跳周期内报告的信息决定在哪个 Worker 上分配资源,然后在该 Worker 上获取资源,然后启动 StandaloneExecutorBackend; 顺便初始化好了一个线程池
5、StandaloneExecutorBackend 向 Driver(SparkContext)注册,这样 Driver 就知道哪些 Executor 为他进行服务了。到这个时候其实我们的初始化过程基本完成了,我们开始执行 transformation 的代码,但是代码并不会真正的运行,直到我们遇到一个 action 操作。生成 一个 job 任务,进行 stage 的划分
6、SparkContext 将 Applicaiton 代码发送给 StandaloneExecutorBackend;并且 SparkContext 解析 Applicaiton 代码,构建 DAG 图,并提交给 DAG Scheduler 分解成 S