Spark有那几种部署模式,每种模式特点是什么?
- 本地模式:spark可以不跑在hadoop集群上,可以通过在本地启动多个线程方式来执行。一般使用该模式进行都是进行调试。本地模式包括以下三种方式:
- local:只启动一个executor
- local[k]:启动k个executor
- local[*]:启动跟cpu数目相同个数的executor
- standalone:分布式部署集群,自带完整的服务,资源管理和任务监控都由Spark自己完成。这个模式也是其他模式的基础
- Spark on YARN:分布式部署集群,资源和任务监控交给YARN管理,但是目前仅支持粗粒度度资源分配方式,包括cluster和client运行模式,cluster适合生产。driver运行在集群的子节点,具有容错功能;Client适合调试,Driver运行在客户端(提交任务的机器)
- Spark on Mesos:Spark运行Mesos上比在YARN上更加灵活,更加自然。用户有两种调度模式可以选择:
- 粗粒度模式(Coarse-grained Mode): 每个应用程序的运行环境由一个Driver和若干个Executor组成。其中,每个Executor占用若干资源,内部可以运行多个Task。应用程序的各个任务正式运行之前,需要将运行环境中的资源全部申请好,且运行过程中要一直占用这些资源,即使不用,直到最后程序运行结束,才会回收这些资源。
- 细粒度模式(Fine-grained Mode):粗粒度模式会造成大量资源浪费,Spark还提供了细粒度调度模式,这种模式的思想就是按需分配。
Spark Driver的功能是什么?
一个Spark作业运行时包括一个Driver进程,也就是作业的主进程,具有main函数,并且有SparkContext的实例,是程序的入口点。
功能:负责向集群申请资源,向master注册信息、负责作业调度,作业解析,生成Stage并调度Task到Executor上。
Spark为什么比MapReduce要快?
- Spark基于内存计算,减少了低效的磁盘交互
- MapReduce的中间结果保存在文件中,提高了可靠性,减少了内存的占用,但是牺牲了性能
- Spark的数据在内存中进行交换,而且Spark在Shuffle的时候不一定落盘,可以cache到内存中,一遍迭代时使用,所以性能比MapReduce要高
- Spark具有高效的调度算法(DAG计算模型)
Spark的DAG计算模型在迭代计算上效率要高于MapReduce。DAG比MapReduce在大多数情况下可以减少shuffle次数,Spark的DAG相当于一个改进版的MapReduce,如果计算不涉及其他节点进行数据交换,Spark可以在内存中一次性完成这些操作,也就是中间结果无需落盘,减少了磁盘IO的操作。 - JVM优化
Hadoop每次MapReduce操作,启动一个Task便会启动一次JVM。而Spark每次MapReduce操作是基于线程的,只在启动Executor的时候启动一次JVM,内存的Task操作是在线程复用的。
网友评论