本章将对Spark作一个简单的介绍,更多教程请参考: Spark教程
Spark是一个用来实现快速而通用的集群计算的平台。扩展了普遍使用的MapReduce计算模型,并且高效地支持更多的计算模式,包括交互式查询和流处理。在处理大规模数据集的时候,速度是很是重要的。Spark的一个重要特色就是可以在内存中计算,于是更快。即便在磁盘上进行的复杂计算,Spark依然比MapReduce更加高效。html
目前Spark的运行模式主要有如下几种:node
local
:主要用于开发调试Spark应用程序Standlone
:利用Spark自带的资源管理与调度器运行Spark集群,采用Master/Slave结构,为解决单点故障,能够采用Xookeeper实现高可靠(High Availability, HA)Apache Mesos
:运行在著名的Mesos资源管理框架基础之上,该集群运行模式将资源管理管理交给Mesos,Spark只负责运行任务调度和计算Hadoop YARN
:集群运行在Yarn资源管理器上,资源管理交给YARN,Spark只负责进行任务调度和计算
Spark运行模式中Hadoop YARN的集群方式最为经常使用,前面一章关于Spark集群搭建就是采用的YARN模式。apache
一个完整的Spark应用程序,如前面一章当中的SparkWorkdCount程序,在提交集群运行时,它涉及到以下图所示的组件:编程
每一个Spark应用都由一个驱动器程序(drive program)来发起集群上的各类并行操做。驱动器程序包含应用的main函数,驱动器负责建立SparkContext,SparkContext能够与不一样种类的集群资源管理器(Cluster Manager),例如Hadoop YARN,Mesos进行通讯,获取到集群进行所需的资源后,SparkContext将
获得集群中工做节点(Worker Node)上对应的Executor(不一样的Spark程序有不一样的Executor,他们之间是相互独立的进程,Executor为应用程序提供分布式计算以及数据存储功能),以后SparkContext将应用程序代码发送到各Executor,最后将任务(Task)分配给executors执行app
一、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获取做业运行状态。