Spark 程序核心概念
* 首先,官网的这张图很好的描述了一个Spark 应用程序的结构,一个Spark应用程序由一个Driver端和多个Executor组成,多个task 以多线程的形式运行在Executor中。
* Driver端: Driver负责运行程序的main()方法,负责将代码发送到各个Executor去执行,然后取回结果,Driver端也是以Executor方式运行,可以运行在本地(Client),也可以运行在集群内部(Cluster),以Spark-shell形式运行的Spark应用程序,其Driver端都是运行在本地,以Spark-submit形式提交的作业可以通过参数- -deploy-mode来指定Driver端运行在哪里。
* Executor: Executor是代码执行的地方,以进程的形式运行在节点之上(如standalone模式的Worker和yarn模式的NM)。
* Task: 一个Executor可以同时运行多个task,每个task执行一个任务,其性质是以多线程的形式运行在Executor中
* Cluster Manager: 根据运行模式的不同(如Standalone,Apache Mesos,Hadoop YARN ,Kubernetes )其性质也会不同,主要是负责获取集群资源的外部服务(如standalone模式的Master和yarn模式的RM)
* Job: 一个Action的触发即为一个job,一个job 存在多个task
* Stage: Job中如果有Shuffle产生就会分为2个Stage,一个Job 可由多个Stage构成,一个Stage 可由多个tas