运行该模式非常简单,只需要把Spark的安装包解压后,改一些常用的配置即可使用,而不用启动Spark的Master、Worker守护进程( 只有采用集群的Standalone方式时,才需要这两个角色),也不用启动Hadoop的各服务(除非要用到HDFS文件系统)。 Spark不一定非要跑在hadoop集群,可以在本地,起多个线程的方式来指定。将Spark应用以多线程的方式直接运行在本地,一般都是为了方便调试,本地单机模式分三类: local: 只启动一个executor local[k]: 启动k个executor local[*]: 启动跟cpu数目相同的 executor
即独立模式, 自带完整的服务,可单独部署到一个集群中,资源管理和任务监控是Spark自己监控,无需依赖任何其他资源管理系统。这个模式也是其他模式的基础. 不使用其他调度工具时会存在单点故障,使用Zookeeper等可以解决
这是一种最有前景的部署模式。但限于YARN自身的发展,目前仅支持**粗粒度模式(**Coarse-grained Mode)。这是由于YARN上的Container资源是不可以动态伸缩的,一旦Container启动之后,可使用的资源不能再发生变化,不过这个已经在YARN计划中了。
考虑到尽量用一个统一的资源调度模式来运行多种任务, 这样可以减轻运维的工作压力, 同时也可以减少资源调度之间的配合(基于集群考虑)
这是很多公司采用的模式,官方推荐这种模式(当然,原因之一是血缘关系)。正是由于Spark开发之初就考虑到支持Mesos,因此,目前而言,Spark运行在Mesos上会比运行在YARN上更加灵活,更加自然。目前在Spark On Mesos环境中,用户可选择两种调度模式之一运行自己的应用程序:
1)、 粗粒度模式(Coarse-grained Mode):每个应用程序的运行环境由一个Dirver和若干个Executor组成,其中,每个Executor占用若干资源,内部可运行多个Task(对应多少个“slot”)。应用程序的各个任务正式运行之前,需要将运行环境中的资源全部申请好,即使不用, 运行过程中也要一直占用这些资源,,最后程序运行结束后,回收这些资源。
2)、细粒度模式(Fine-grained Mode):鉴于粗粒度模式会造成大量资源浪费,Spark On Mesos还提供了另外一种调度模式:细粒度模式,这种模式类似于现在的云计算,思想是按需分配。 与粗粒度模式一样,应用程序启动时,先会启动executor,但每个executor占用资源仅仅是自己运行所需的资源,不需要考虑将来要运行的任务,之后,mesos会为每个executor动态分配资源,每分配一些,便可以运行一个新任务,单个Task运行完之后可以马上释放对应的资源。每个Task会汇报状态给Mesos slave和Mesos Master,便于更加细粒度管理和容错,这种调度模式类似于MapReduce调度模式,每个Task完全独立,优点是便于资源控制和隔离,但缺点也很明显,短作业运行延迟大。
Docker是一种相比虚拟机更加轻量级的虚拟化解决方案,所以在Docker上搭建Spark集群具有可行性。
需要通过公司需求和运行速度来综合衡量
standalone模式
1.考虑到尽量用一个统一的资源调度模式来运行多种任务, 2.这样可以减轻运维的工作压力, 3.同时也可以减少资源调度之间的配合(基于集群考虑)
1、client向ResourceManager注册并提交任务 2、ResourceManager向NodeManager进行通信,开始在某个NodeManager启动AppMaster 3、AppMaster启动后开始向ResourceManager申请资源 4、ApplicationManager开始资源调度,开始通知NodeManager启动YarnChild 5、YarnChild开始和AppMaster进行通信,AppMaster对所有YarnChild进行监控 6、MR执行完成以后,YarnChild被AppMaster回收,AppMaster把自己回收掉