spark Steaming、spark ml等命令,最终都会转换成spark-core的组件命令来执行
spark RDD是 spark-core组件的数据结构、或叫数据模型、数据抽象
Resilient Distributed Dataset
- 基本概念
- 弹性分布式数据集
- 是spark的数据抽象
- 是一个不可变、可分区、里面元素可并行计算的合集
- 可以看做是对一堆数据的打包,就是一个RDD,也可以说,这个对象就的RDD
- Dataset:RDD是一个数据集合,打包在一起
- 所有spark对数据的操作,都会转换成对RDD的操作
- 包括:spark sql、spark streaming、spark ml、spark mllib等
- Distributed:分布式的
- Resilient :弹性的
- 数据可以保存在磁盘上、也可以保存在内存里
- 数据分布式是弹性的
- 注:这个弹性不是说数据可动态扩展,而是说数据由容错性,有副本
- RDD会在多个节点上存储,和HDFS一样
- HDFS文件分为多个block存储在不同节点
- RDD文件分为多个partition(分区),不同分区可能存储在不同节点
- spark读取HDFS场景下,会把hdfs的block读到内存,然后抽象为spark的partition来进行操作
- spark计算结束,一般会把数据持久化到hive、hbase、hdfs等
- 存储举例:每个rdd的partion会先转换为hdfs的block,如果partition小于128M,那么会一一对应,如果大于128M,那么一个partition会拆成多个block再存
- 不可变
- 代码的变量 a = 1, 然后 a = a + 1 此时变量a是可变的
- spark数据:rdd1 进行更新, 会创建一个rdd2, 原来的rdd1依然存在(该占内存还是占内存,不能直接对rdd1这块数据进行更新,需要用副本rdd2来处理)
- 由父rdd来生成一个子rdd,父rdd的状态不会变化
- 为什么这样做?
- 容错,主要思路:通过新增版本来实现数据的改变,但保留了历史快照,用于容错
- 具体为:分布式节点计算时,可能某个机器计算失败了,如果没有历史快照,很可能需要重新计算,太亏了。
- 这是基于海量数据的。如果出错了,可以基于上一个历史版本,继续往下计算
- 可分区
- 并行计算