文章目录
前言
Spark是当今大数据领域最活跃、最热门、最高效的大数据通用计算引擎,同时也是我个人非常喜欢的一款计算框架。首先给大家介绍一下SparkCore,接下来会写一系列的文章,进行总结,希望我和大家一起共同进步。
一、Spark概述
Spark 是一个快速、通用的计算引擎。
1.1Spark特点
速度快:Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流
使用简单:Spark支持 Scala、Java、Python、R的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。
通用:Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(Spark SQL)、实时流处理(SparkStreaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。
兼容好:Spark可以非常方便地与其他的开源产品进行融合。
1.2Spark 与 Hadoop对比
从狭义的角度上看:Hadoop是一个分布式框架,由存储、资源调度、计算三部分组成;Spark是一个分布式计算引擎,由 Scala 语言编写的计算框架,基于内存的快速、通用、可扩展的大数据分析引擎。
从广义的角度上看,Spark是Hadoop生态中不可或缺的一部分,Spark框架是对MR框架的优化。
1.3Spark对比MR优势
Spark积极使用内存:MR框架中一个Job 只能拥有一个 map task 和一个 reduce task。如果业务处理逻辑复杂,需要将多个 job 组合起来,前一个job的计算结果必须写到HDFS,才能交给后一个job。这样一个复杂的运算,在MR框架中会发生很多次写入、读取操作操作。
多进程模型(MR) vs 多线程模型(Spark):MR框架中的的Map Task和Reduce Task是进程级别的,而Spark Task是基于线程模型的。MR框架中的 map task、reduce task都是 jvm 进程,每次启动都需要重新申请资源,消耗了不必要的时间。Spark则是通过复用线程池中的线程来减少启动、关闭task所需要的系统开销。
1.4Spark架构
Cluster Manager: 集群资源的管理者,Spark支持3种集群部署模式:Standalone、Yarn、Mesos
Worker Node: 工作节点,管理本地资源
Driver Program:运行应用的 main() 方法并且创建了 SparkContext。由Cluster Manager分配资源,SparkContext发送 Task 到 Executor 上执行
Executor:在工作节点上运行,执行 Driver 发送的 Task,并向 Dirver 汇报计算结果
1.5集群部署模式
Spark支持3种集群部署模式:Standalone、Yarn、Mesos
Standalone模式:
独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统。从一定程度上说,该模式是其他两种的基础
集群角色:Cluster Manager:Master;Worker Node:Worker
仅支持粗粒度的资源分配方式
Spark On Yarn模式:
Yarn拥有强大的社区支持,且逐步已经成为大数据集群资源管理系统的标准
Spark on yarn 的支持两种模式:yarn-cluster:适用于生产环境yarn-client:适用于交互、调试,希望立即看到app的输出
集群角色:Cluster Manager:ResourceManagerWorker ;Node:NodeManager仅支持粗粒度的资源分配方式
Spark On Mesos模式:
官方推荐的模式。Spark开发之初就考虑到支持MesosSpark运行在Mesos上会比运行在YARN上更加灵活,更加自然
集群角色:Cluster Manager:Mesos Master;Worker Node:Mesos Slave
支持粗粒度、细粒度的资源分配方式
粗粒度模式(Coarse-grained Mode):每个应用程序的运行环境由一个Dirver和若干个Executor组成,其中,每个Executor占用若干资源,内部可运行多个Task。应用程序的各个任务正式运行之前,需要将运行环境中的资源全部申请好,且运行过程中要一直占用这些资源,即使不用,最后程序运行结束后,回收这些资源。
细粒度模式(Fine-grained Mode):鉴于粗粒度模式会造成大量资源浪费,Spark On Mesos还提供了另外一种调度模式:细粒度模式,这种模式核心思想是按需分配。
二、Spark安装部署模式
2.1本地模式
本地模式部署在单机,主要用于测试或实验;最简单的运行模式,所有进程都运行在一台机器的 JVM 中;本地模式用单机的多个线程来模拟Spark分布式计算,通常用来验证开发出来的应用程序逻辑上有没有问题;这种模式非常简单,只需要把Spark的安装包解压后,改一些常用的配置即可使用。不用启动Spark的Master、Worker守护进程,也不用启动Hadoop的服务(除非用到HDFS)。
2.2伪分布式
伪分布式模式:在一台机器中模拟集群运行,相关的进程在同一台机器上,不用启动集群资源管理服务;
local-cluster[N,cores,memory]
N模拟集群的 Slave(或worker)节点个数
cores模拟集群中各个Slave节点上的内核数
memory模拟集群的各个Slave节点上的内存大小
2.3集群模式–Standalone模式
分布式部署才能真正体现分布式计算的价值与单机运行的模式不同,这里必须先启动Spark的Master和Worker守护进程;关闭 yarn 对应的服务不用启动Hadoop服务,除非要使用HDFS的服务。
2.3.1运行模式(cluster / client)
Client模式(缺省):Driver运行在提交任务的Client,此时可以在Client模式下,看见应用的返回结果,适合交互、调试
Cluster模式:Driver运行在Spark集群中,看不见程序的返回结果,合适生产环境
2.3.2 高可用解决方案
(1)基于zookeeper的Standby Master:适用于生产模式;将 Spark 集群连接到Zookeeper,利用 Zookeeper提供的选举和状态保存的功能,一个 Master 处于 Active 状态,其他 Master 处于Standby状态;保证在ZK中的元数据主要是集群的信息,包括:Worker,Driver和Application以及Executors的信息;如果Active的Master挂掉了,通过选举产生新的 Active 的 Master,然后执行状态恢复,整个恢复过程可能需要1~2分钟。
(2)基于文件系统的单点恢复:主要用于开发或者测试环境。将Spark Application 和 Worker 的注册信息保存在文件中,一旦Master发生故障,就可以重新启动Master进程,将系统恢复到之前的状态。
2.5 集群模式–Yarn模式
需要启动的服务:hdfs服务、yarn服务需要关闭 Standalone 对应的服务(即集群中的Master、Worker进程),一山不容二虎!
在Yarn模式中,Spark应用程序有两种运行模式:
yarn-client:Driver程序运行在客户端,适用于交互、调试,希望立即看到app的输出
yarn-cluster:Driver程序运行在由RM启动的 AppMaster中,适用于生产环境