Spark系列
1,概述
(1)为什么会有Spark?因为传统的并行计算模型无法有效的解决迭代计算(iterative)和交互式计算(interactive);而Spark的使命便是解决这两个问题,这也是他存在的价值和理由。
(2)Spark如何解决迭代计算?其主要实现思想就是RDD,把所有计算的数据保存在分布式的内存中。迭代计算通常情况下都是对同一个数据集做反复的迭代计算,数据在内存中将大大提升IO操作。这也是Spark涉及的核心:内存计算。
(3)Spark如何实现交互式计算?交互式下对查询速度、计算速度要求比较高,类似于即席查询。(交互模式下几秒延迟(15s)能处理的最大内存数限制在1TB)
(4)Spark和RDD的关系?可以理解为:RDD是一种具有容错性基于内存的集群计算抽象方法,Spark则是这个抽象方法的实现。
在spark计算框架有自己的运算单位(RDD)和自己的运算符(RDD算子)。
Spark RDD和Spark RDD算子组成了计算的基本单位,并由数据流向的依赖关系形成非循环数据流模型(DAG),形成Spark基础计算框架
2,名词解释:
Lineage:
RDD的Lineage记录的是粗颗粒度的特定数据转换(Transformation)操作(filter, map, join etc.)行为。当这个RDD的部分分区数据丢失时,它可以通过Lineage获取足够的信息来重新运算和恢复丢失的数据分区。(lineage),即RDD有充足的信息关于它是如何从其他RDD产生而来的;
Driver:
1.Spark中的Driver即运行上述Application的main()函数并且创建SparkContext,其中创建SparkContext的目的是为了准备Spark应用程序的运行环境;
2.Spark应用程序运行时包含一个Driver进程,也是应用程序的主进程,负责应用程序的解析、生成Stage并调度Task到Executor上;
3.跟踪Executor的运行状况;
Application:
Spark Application的概念和Hadoop MapReduce中的类似,指的是用户编写的Spark应用程序,包含了一个Driver功能的代码和分布在集群中多个节点上运行的Executor代码;
DAGScheduler:
把一个spark作业转换成stage的DAG(Directed Acyclic Graph有向无环图),根据RDD和stage之间的关系,找出开销最小的调度方法,然后把stage以TaskSet的形式提交给TaskScheduler
TaskScheduler:
将TaskSet提交给Work node集群运行并返回结果,维护所有TaskSet,当Executor向Driver发送心跳时,TaskScheduler会根据其资源剩余情况分配相应的Task。另外TaskScheduler还维护着所有Task的运行状态,重试失败的Task它是一个进程 ,将Task分发到Executor中,并接受Executor的注册,监控Executor情况。
持久化:
支持被重用的RDD进行缓存操作(如in-memory或溢出到磁盘)
SparkContext
是Spark功能的主要入口点,一个SparkContext代表一个集群连接,可以用其在集群中创建RDD、累加变量、广播变量等,在每一个可用的JVM中只有一个SparkContext,在创建一个新的SparkContext之前,必须先停止该JVM中可用的SparkContext,这种限制可能最终会被修改。