Spark是一个使用来实现快速而通使用的集群计算的平台。扩展了广泛用的MapReduce计算模型,而且高效地支持更多的计算模式,包括交互式查询和流解决。在解决大规模数据集的时候,速度是非常重要的。Spark的一个重要特点就是能够在内存中计算,因此更快。即便在磁盘上进行的复杂计算,Spark仍然比MapReduce更加高效。
Spark运行模式
每个Spark应使用都由一个驱动器程序(drive program)来发起集群上的各种并行操作。驱动器程序包含应使用的main函数,驱动器负责创立SparkContext,SparkContext可以与不同种类的集群资源管理器(Cluster Manager),例如Hadoop YARN,Mesos进行通信,获取到集群进行所需的资源后,SparkContext将
得到集群中工作节点(Worker Node)上对应的Executor(不同的Spark程序有不同的Executor,他们之间是相互独立的进程,Executor为应使用程序提供分布式计算以及数据存储功能),之后SparkContext将应使用程序代码发送到各Executor,最后将任务(Task)分配给executors执行。
1、Client提交应使用。
2、Master找到一个Worker启动Driver
3、Driver向Master或者者资源管理器申请资源,之后将应使用转化为RDD Graph
4、再由DAGSchedule将RDD Graph转化为Stage的有向无环图提交给TaskSchedule。
5、再由TaskSchedule提交任务给Executor执行。
6、其它组件协同工作,确保整个应使用顺利执行。
1、基于YARN的Spark作业首先由用户端生成作业信息,提交给ResourceManager。
2、ResourceManager在某一NodeManager汇报时把AppMaster分配给NodeManager。
3、NodeManager启动SparkAppMaster。
4、SparkAppMastere启动后初始化而后向ResourceManager申请资源。
5、申请到资源后,SparkAppMaster通过RPC让NodeManager启动相应的SparkExecutor。
1、SparkExecutor向SparkAppMaster汇报并完成相应的任务。
7、SparkClient会通过AppMaster获取作业运行状态。
ps:各位读者觉着有使用可以加关注,后续还会有更多的技术文章,供大家一起交流学习。