Spark架构与组件
原创
©著作权归作者所有:来自51CTO博客作者959_1x的原创作品,请联系作者获取转载授权,否则将追究法律责任
Spark遵循主从架构。它的集群由一个主服务器和多个从服务器组成。
Spark架构依赖于两个抽象:
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