第一章 Spark系统概述
目录
- 大数据处理框架
- Spark大数据处理框架
- RDD表达能力
- Spark子系统
注:学习《Spark大数据处理技术》笔记
1. 大数据处理框架
1. 集群环境对于编程的挑战
- 并行化
- 对单节点失败的处理
- 资源分配问题
2. 由此产生了大数据编程框架
- MapReduce
- 是什么?一个简单通用和自动容错的批处理计算模型
- 缺点:交互式和流处理,MapReduce并不适合
- 所以出现了很多不同于MapReduce的专有的数据处理模型
- 但这些专有系统模型也有一些不足
- 重复工作
许多专有系统在解决同样的问题,比如分布式作业以及容错,这些问题在每个专有系统中会被重复被解决 - 组合问题
在不同的系统之间进行组合计算是一件费力不讨好的事情 - 适用范围的局限性
如果一个应用不适合一个专有的计算系统,那么只能换一个系统,或者重新写一个计算系统 - 资源分配
在不同的计算引擎之间进行资源的动态共享是比较困难的 - 管理问题
对于多个专有系统,需要花费更多的精力和时间来管理和部署
- 重复工作
2. Spark大数据处理框架
1. Spark的由来
- 针对MapReduce及各种专有系统出现的不足,提出了统一大数据处理框架Spark,创新性提出RDD概念(弹性数据集)
- 目的:是为了实现MapReduce不擅长的计算工作(迭代式、交互式和流式)
- 特性:在并行计算的各个阶段进行有效的数据共享,这种共享就是RDD本质
2. RDD的表达能力
- 使用RDD可以实现很多现有的集群编程模型以及一些以前的模型不支持的新应用
- RDD还提供了高级特性:提供包括容错处理、滞后节点处理等这些专有系统缺乏的特性
- 四种模型
- 迭代算法
可以用于图处理和机器学习 - 关系型查询
MapReduce由于容错模型导致速度很慢,RDD通过实现很多通用的数据库引擎特性,可以获得非常好的性能 - MapReduce批处理
RDD提供的接口是MapReduce的超集,所以RDD可以有效运行利用MapReduce实现的应用程序 - 流式处理
D-Stream(离散数据流)将流式计算当做一系列的短小而确定的批处理操作,将两个离散流之间的状态保存在RDD中。离散型模型能够运行通过RDD的继承关系图进行并行性的恢复而不需要进行数据拷贝
- 迭代算法
3. Spark子系统
- 大数据处理场景
- 复杂的批量数据处理
十分钟到半小时 - 基于历史数据的交互式查询
十秒到数分钟 - 基于实时数据流的数据处理
数百毫秒到数秒
- 复杂的批量数据处理
- 由于RDD具有丰富的表达能力,所以在Spark Core的基础上衍生出能够同时处理三种情形的统一大数据处理平台
- Spark Core
基于RDD提供了丰富的操作接口,利用DAG进行统一的任务规划,使得Spark能够更加灵活处理类似MapReduce的批处理作业 - Shark/Spark SQL
兼容Hive的接口HQL,提供了比Hive高出10~100倍的查询速度的分布式SQL引擎 - Spark Stream
将流式计算分解成一系列短小的批处理作业,利用Spark轻量级和低延时的调度框架,可以很好的支持流式处理 - GraphX
基于Spark的图计算框架,兼容Pregel和GraphLab接口,增强了图构建以及图转换功能 - MLlib
Spark Core天然地非常适合迭代式计算,MLlib就是构建在Spark上的机器学习算法库。
- Spark Core
- Spark最终目标是将批处理、交互式处理、流式处理融合到同一个软件栈中
-
Spark生态系统兼容Hadoop生态系统
-
Spark生态系统学习成本很低
要实现一个相对完整的端到端解决方案,以前需要部署维护多个专有系统,现在只需要一个Spark系统 -
Spark性能表现优异
由于Spark利用DAG进行调度执行规划,所以在多任务计算以及迭代计算中能够大量减少磁盘I/O的时间。另外,对于每一项任务启动一个线程,而不是进程,大大缩短了任务启动时间 -
Spark有强大的社区支持
-
Spark支持多种语言编程接口
Spark生态本身使用Scala语言编写的,但考虑到其流行性,因此Spark从一开始就支持Java和Python接口。
-