Spark
- Spark v.s Hadoop
- 处理问题的层面不同:Hadoop包括存储HDFS和计算MR;Spark没有存储功能
- Spark数据处理速度远超Hadoop
- 关于内存计算
- 内存计算不是Spark的特性,Spark利用内存实现数据缓存,并不将数据持久化在内存中(就是用用内存)
- 比Hadoop快的原因:A. task启动时间比较快,Spark是fork出线程;而MR是启动一个新的进程;B. Spark只有在shuffle的时候才会将数据放在磁盘,而MR却不是; C. 典型的MR工作流是由很多MR作业组成的,他们之间的数据交互需要把数据持久化到磁盘才可以;而Spark支持DAG以及pipelining,在没有遇到shuffle完全可以不把数据缓存到磁盘。
- 特性:
- 高效、高性能的批处理
- 丰富、灵活的编程接口
- 灵活、易用的编程模型
- 多种类数据处理支持
- 多数据源支持
- 计算核心层
- Spark计算单元
应用程序:由一个driver program和多个job组成
job:有多个stage组成
stage:对应一个taskset
taskset:对应一组关联的相互之间没有shuffle依赖关系的task组成
task:任务最小的工作单元 - Spark组件
驱动程序driver program:将用户提交的job转换成DAG图
Executor:真正执行task的单元,一个worknode上可以有多个executor - 资源管理组件
YARN
Mesos
Standalone(Spark自带)
- Spark计算单元
DAG(Directed Acyclic Graph)有向无环图
Spark中使用DAG对RDD的关系进行建模
子任务之间由逻辑关系或运行先后顺序等因素被构建成有向无环图结构
- 应用表达层(最上层)
- DAG执行引擎层(中间层)
- 物理机集群(最下层)
RDD(resilient distributed dataset)弹性分布式数据集
- 概念:
是Spark的核心数据模型,RDD是Spark中待处理的数据的抽象,有容错机制的粗粒度的
通俗点来讲,可以将 RDD 理解为一个分布式对象集合,本质上是一个只读的分区记录集合。每个 RDD 可以分成多个分区,每个分区就是一个数据集片段。一个 RDD 的不同分区可以保存到集群中的不同结点上,从而可以在集群中的不同结点上进行并行计算
- 特点:
- 数据集合
- 弹性分布:计算过程中内存不够时它会和磁盘进行数据交换
- 可持久化
- 分布式存储:可以分布在多台机器上进行并行处理
- 只读:不能修改,只能通过转换操作生成新的 RDD
- 可重新计算
- 基于内存:可以全部或部分缓存在内存中,在多次计算间重用
- 操作:
- 构建:A. 从内存里直接读取数据;B. 从文件系统里读取数据
- 转换Transformation:返回新的 RDD
- 行动 / 操作Action:执行计算并按指定的方式输出结果。接受RDD,输出一个值或者结果
- 依赖关系:
- 一个作业从开始到结束的计算过程中产生了多个RDD,RDD之间是彼此相互依赖的,我们把这种父子依赖的关系称之为“血统”。RDD的容错机制又称“血统”容错。
- 窄依赖 (Narrow Dependencies) :是指父RDD的每个分区都只被子RDD的一个分区所使用 。
- 宽依赖(Wide Dependencies):就是指父RDD的分区被多个子 RDD 的分区所依赖
从失败恢复上看,窄依赖的失败恢复起来更高效
- 运行原理:
- 创建 RDD 对象
- DAGScheduler模块介入运算,计算RDD之间的依赖关系。RDD之间的依赖关系就形成了DAG
- 阶段划分:每一个JOB被分为多个Stage,划分Stage的一个主要依据是RDD之间的依赖关系,从后往前推,遇到宽依赖就断开,划分为一个stage
- some examples
Spark技术堆栈
Mlib
Spark MLlib 是Spark中可以扩展的机器学习库
- 底层基础:包括Spark的运行库、矩阵库和向量库;
- 算法库:包含广义线性模型、推荐系统、聚类、决策树和评估的算法;
- 实用程序:包括测试数据的生成、外部数据的读入等功能
RDD相关内容扩展:Spark RDD是什么