Spark是一种分布式的计算框架,可以处理海量数据,目前流行的计算框架
- MapReduce:适用于离线批处理,也可以用于实时计算
- Storm: 用于实时计算
- Spark:即可以用于离线批处理,也可以用于实时计算
- Flink:主要用于实时计算
综上,我们发现MapReduce计算框架是一种高度依赖于磁盘I/O框架,而且在有些业务场景下,比如某算法(梯度下降法,逻辑回归)会多次用到前写job的结果,导致重新计算及shuffle过程
Spark计算框架是高度依赖于内存框架,而且支持将中间结果缓存,避免大量的重新计算,所以Spark框架也被称为内存计算框架
Spark生态架构
Spark框架设计目的:可以一栈式处理大数据所有的应用场景包括:
- 离线批处理
- 实时处理
- 交互式查询
- 算法建模
Spark使用模式
- Local:本地单机模式,一般用于测试或练习
- Standalone:Spark集群模式
- On Yarn:Spark的资源交给Yarn来管理
Spark最核心的数据结构
RDD(Resilient Distributed Datasets)
RDD:弹性分布式数据集,初学时,可以把RDD看做是一种集合类型(Array,List类比)
RDD的特点
- 有容错机制,即使数据丢失是可以恢复的
- 有分区机制,可以并行处理RDD数据
RDD的分区机制目的:
可以分布式的计算RDD的数据集,底层可以确保分区数据的负载均衡状态
创建RDD的方式
- 将一个普通的集合类型(Array或List)转为RDD
- 通过Spark读取外部存储文件,将文件数据转变为RDD,可以从本地磁盘读取,也可以从HDFS读取
补充知识:
- sc是SparkContext的别名对象,用于操作Spark的入口对象,通过sc可以创建RDD,广播变量,此外sc用于负责job任务的分配和监控
- 创建RDD方法
(1) sc.parallelize(普通类型集合,分区数量)
(2) sc.makeRDD(普通类型集合,分区数量) - 关于RDD分区相关的方法
(1) rdd.partitions.size:查看分区数
(2) rdd.glom.collect:查看分区数据 - 创建RDD的两种途径
RDD的函数操作
常用的RDD操作方法
Spark的DAG概念
RDD之间的依赖关系
两种:
Spark DAG 的Stage划分