基本概念
分布式内存计算的统一分析引擎
,特点是对任意类型的数据进行自定义计算
RDD
:分布式内存抽象,使程序员能在大规模集群中做内存计算,并有一定的容错
- 速度快
- 可以将中间处理结果数据存储到内存中(内存迭代计算)
- 提供了丰富的算子(API),可以做到复杂任务在一个Spark程序中完成
- 易于使用
- 通用性强
应用场景
Hadoop | Spark | |
---|---|---|
类型 | 基础平台,包含计算、存储、调度 | 春计算工具(分布式) |
场景 | 海量数据批处理(磁盘迭代计算) | 海量数据的批处理(内存迭代计算、交互式计算),流计算 |
价格 | 对机器要求低、便宜 | 对内存有要求、相对较贵 |
编程范式 | Map + Reduce,API 较为底层,算法适应性差 | RDD组成DAG有向无环图,API较为顶层,方便使用 |
数据存储 | MapReduce中间结果在HDFS磁盘上,延迟大 | RDD中间运算结果在内存上,延迟小 |
运行方式 | Task以进程方式维护,任务启动慢 | Task以线程方式维护,任务启动快,可批量创建提高并行能力 |
尽管Spark相对于Hadoop而言具有较大优势,但Spark并不能完全替代Hadoop
- 许多计算工具仍基于MR架构,比如非常成熟的Hive
- Spark仅做计算,而Hadoop生态圈不仅有计算(MR)也有存储(HDFS)和资源管理调度(YARN)
Hadoop的基于进程的计算和Spark基于线程方式优缺点?
Hadoop中的MR中每个map/reduce task都是一个java进程方式运行,好处在于进程之间是互相独立的,每个task独享进程资源,没有互相干扰,监控方便,但是问题在于task之间不方便共享数据,执行效率比较低。
比如多个map task读取不同数据源文件需要将数据源加载到每个map task中,造成重复加载和浪费内存。
而基于线程的方式计算是为了数据共享和提高执行效率,Spark采用了线程的最小的执行单位,但缺点是
线程之间会有资源竞争
框架模块
- Spark Core
- Spark的核心,Spark核心功能均由Spark Core模块提供,是Spark运行的基础
- Spark Core以RDD为数据抽象,提供Python、Java、Scala、R语言的API
- 可以编程进行海量离线数据批处理计算
- SparkSQL
- 基于SparkCore之上,提供结构化数据的处理模块
- SparkSQL支持以SQL语言对数据进行处理,SparkSQL本身针对离线计算场景
- 同时基于SparkSQL,StructuredStreaming模块,可以以SparkSQL为基础,进行数据的流式计算
- SparkStreaming
- 以SparkCore为基础,提供数据的流式计算功能
- MLlib
- 以SparkCore为基础,进行机器学习计算,内置了大量的机器学习库和API算法等
- 方便用户以分布式计算的模式进行机器学习计算
- GraphX
- 以SparkCore为基础,进行图计算,提供了大量的图计算API
- 方便用于以分布式计算模式进行图计算
运行模式
- 本地模式(单机--
开发和测试
):- 以
一个独立的进程
, 通过其内部的多个线程来模拟
整个Spark运行时的环境
- 以
- Standalone模式(集群)
- Spark中的各个角色以
独立进程
的形式存在,并组成Spark集群环境
- Spark中的各个角色以
- Hadoop YARN模式(集群)
- Spark中的各个角色
运行在YRAN的容器内部
,并组成Spark集群环境
- Spark中的各个角色
- Kubernetes模式(容器集群)
- Spark中的各个角色
运行在k8s的容器内部
,并组成Spark集群环境
- Spark中的各个角色
- 云服务模式(运行在云平台上)
结构角色
(重点)
YARN
- 资源管理层面
- 集群资源管理者(Master):ResourceManager
- 单机资源管理者(Worker):NodeManager
- 任务计算层面
- 单任务管理者(Master):ApplicationMaster
- 单任务执行者(Worker):Task(容器内计算框架的工作角色)
Spark
- 资源层面
- Master:集群资源管理(ResourceManager)
- Worker:单机资源管理(NodeManager)
- 计算层面
- Driver:单任务管理者(ApplicationMaster)
- Executor:单任务执行者(YARN容器内的Task)
总结
- Spark解决了什么问题
- 海量数据的计算,可以进行离线批处理以及实时流计算
- Spark有哪些模块
- 核心SparkCore
- SQL计算(SparkSQL)
- 流计算(
SparkStreaming
) - 图计算(GraphX)
- 机器学习(MLlib)
- Spark特点有哪些
- 速度快
- 使用简单
- 通用性强
- 多种模式运行
- Spark运行模式
- 本地模式
- 集群模式
- StandAlone
- YARN
- K8s
- 云模式
评论区