Spark是一个用来实现快速而通用的集群计算的平台。扩展了普遍使用的MapReduce计算模型,并且高效地支持更多的计算模式,包括交互式查询和流处理。在处理大规模数据集的时候,速度是很是重要的。Spark的一个重要特色就是可以在内存中计算,于是更快。即便在磁盘上进行的复杂计算,Spark依然比MapReduce更加高效。Spark与Hadoop紧密集成,他能够在YARN上运行,并支持Hadoop文件格式及其储存后端HDFShtml
Mapreduce | Spark |
数据存储结构:hdfs文件系统的split | 使用内存构建弹性分布式数据集RDD,对数据进行运算和cachenode |
编程范式:Map+Reduce | 计算中间数据在内存中的维护,存取速度是磁盘的多个数量级 |
Task以进程的方式维护,任务启动就要几秒钟 | Task以线程的方式维护,对小数集的读取能达到亚秒级的延迟 |
组件的功能编程
ClusterManager:在Standalone模式中即为Master节点(主节点),控制整个集群,监控Worker.在YARN中为ResourceManagerWorker:从节点,负责控制计算节点,启动Executor或Driver。在YARN模式中为后端
NodeManager:负责计算节点的控制。框架
Driver:运行Application的main()函数并建立SparkContect。分布式
Executor:执行器,在worker node上执行任务的组件、用于启动线程池运行任务。每一个Application拥有独立的一组Executor。函数
SparkContext:整个应用的上下文,控制应用的生命周期。oop
RDD:Spark的计算单元,一组RDD可造成执行的有向无环图RDD Graph。性能
DAG Scheduler:根据做业(Job)构建基于Stage的DAG,并提交Stage给TaskScheduler。spa
TaskScheduler:将任务(Task)分发给Executor。
SparkEnv:线程级别的上下文,存储运行时的重要组件的引用。
SparkEnv内构建并包含以下一些重要组件的引用:
一、MapOutPutTracker:负责Shuffle元信息的存储。
二、BroadcastManager:负责广播变量的控制与元信息的存储。
三、BlockManager:负责存储管理、建立和查找快。
四、MetricsSystem:监控运行时性能指标信息。
五、SparkConf:负责存储配置信息。
组件的执行流程
1. 每一个Spark应用都由一个驱动器程序(Driver Program)来发起集群上的各类并行操做。启动器包含应用的main函数,驱动器负责建立SparkContext(上下文);SparkContext能够与不一样种类的集群资源管理器(Cluster Manager),例如Yarn进行通讯。
2. SparkContext 获取到集群进行所需的资源后,将获得集群中工做阶段(Worker Node)上对应的 Executor(不一样的Spark程序有不一样的Executor,他们之间是互相独立的进程,Executor为应用程序提供分布式计算以及数据存储功能)
3. 以后SparkContext将应用程序代码发送到各个Executor,最后将Task(任务)分配给Executors执行
一、Client提交应用。
二、Master找到一个Worker启动Driver
三、Driver向Master或者资源管理器申请资源,以后将应用转化为RDD Graph
四、再由DAGSchedule将RDD Graph转化为Stage的有向无环图提交给TaskSchedule。
五、再由TaskSchedule提交任务给Executor执行。
六、其它组件协同工做,确保整个应用顺利执行。
一、基于YARN的Spark做业首先由客户端生成做业信息,提交给ResourceManager。
二、ResourceManager在某一NodeManager汇报时把AppMaster分配给NodeManager。
三、NodeManager启动SparkAppMaster。
四、SparkAppMastere启动后初始化而后向ResourceManager申请资源。
五、申请到资源后,SparkAppMaster经过RPC让NodeManager启动相应的SparkExecutor。
六、SparkExecutor向SparkAppMaster汇报并完成相应的任务。
七、SparkClient会经过AppMaster获取做业运行状态。