Spark遵循主从架构。它的集群由一个主服务器和多个从服务器组成。
 Spark架构依赖于两个抽象:
- 弹性分布式数据集(RDD)
 - 有向无环图(DAG)
 
RDD
RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是 Spark 中最基本的数据处理模型。代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。
弹性:1.存储 2.容错 3.计算 4.分片
 分布式:数据存储在集群上
 数据集:RDD封装了计算逻辑,并不保存数据
 数据抽象:RDD是一个抽象类,需要子类实现
 不可变:RDD 封装了计算逻辑,是不可以改变的,想要改变,只能产生新的 RDD,在新的 RDD 里面封装计算逻辑
实例:WordCount
object Spark03_WordCount {
  def main(args: Array[String]): Unit = {
    // 装饰者模式
    // HadoopRDD.textFile -> MapPartitionsRDD(flatMap) -> MapPartitionsRDD(map) -> ShuffledRDD
    // 只有在最后的collect才会真正的执行业务逻辑,前面的都是功能的扩展
    // RDD是不报存数据的,IO保存数据
    // RDD有分区的概念
    // RDD 代码中是一个抽象类,是Spark中最基本的数据处理模型,代表弹性,不可变,分区元素可并行计算的集合
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("wc")
    val sc = new SparkContext(sparkConf)
    val lines:RDD[String] = sc.textFile("E:\\atguiguDemo03\\leet-code\\spark01\\src\\main\\resources\\1.txt")
    val result = lines.flatMap(_.split(" "))
        .map(word => (word, 1))
        .reduceByKey(_ + _)
        .collect()
      .foreach(println)
    sc.stop()
  }
}

有向无环图(DAG)
将整个程序计算的执行过程用图形表示出来,这样更直观,更便于理解,可以用于表示程序的拓扑结构
spark架构
Spark 框架的核心是一个计算引擎,整体来说,它采用了标准 master-slave 的结构。如下图所示,它展示了一个 Spark 执行时的基本结构。图形中的 Driver 表示 master,负责管理整个集群中的作业任务调度。图形中的 Executor 则是 slave,负责实际执行任务。
组件
Driver:Client
Executor:Server
Mastor/Worker
ApplicationMastor










