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 可由多个task 组成
Spark-shell
- Spark-shell是以一种交互式命令行的模式来启动一个Spark作业,它会给你创建好Spark应用程序的入口SparkContext,简称sc,SparkSql 的入口SparkSession(spark2.0)简称spark, 并且以参数的形式来指定运行模式,应用程序名称等(S