RDD(Resilient Distributed Datasets:弹性分布式数据集)

RDD是Spark框架中的核心概念,通俗来讲,Spark无论处理什么数据都会先整合成一个拥有多个分块的数据集,而这个数据集就是RDD。

RDD所具有特点

(1)不可变性:RDD是一种不可变的数据结构,一旦创建,它将不可以在原地修改,一旦修改RDD的操作都会返回一个新的RDD。

(2)分片:RDD表示的是一组数据的分区。这些分区分布在多个集群节点上,然而当Spark在单个节点上运行时,所有的分区数据都会在当前节点上。Spark存储RDD的分区和数据集物理分区之间关系的映射关系。RDD是各个分布式数据源之中数据的一个抽象,它通常表示分布在多个集群节点上的分区数据。例如HDFS将数据分片或分块存储在集群中,默认情况下,一个RDD分区对应一个HDFS文件分片。

(3)容错性

(4)接口:RDD是一个处理数据的接口。

(5)强类型:RDD类有一个参数用于表示类型,RDD可以表示不同类型的数据。RDD可以表示同一类型数据的分布式集合,包括Integer、Long、Float、Double和String等。

(6)驻留在内存中:对于一个缓存在内存中的RDD进行操作比操作没缓存的RDD要快很多。

RDD拥有两种类型的操作

  1. Transformations(Create)
  2. Actions(Compute)
    No:transformation操作属于惰性操作,当且仅当actions操作触发时才会操作

RDD持久化(Persistence):
我们可以利用rdd的持久化来避免重复计算。当进行其他的transformation操作或者actions操作的时候可以重复利用处于cache(缓存)中的数据。RDD的持久化主要由spark的storage模块完成,实现了 RDD 与物理存储的解耦合。storage模块也是采用master/slave形式

1139681-20170912160132141-96711369.png

RDD caching and data swap policy:
Spark implements an LRU(最少使用原则) eviction policy for RDDs.
When RDD storage space is maximized, LRU used partition is evicted from memory

RDD 数据缓存原则
RDD的partition主要存储在三个位置:磁盘/堆内内存/堆外内存
主要方法有:
cache():只有一种MEMORY_ONLY一种默认缓存级别,实质上调用persist()方法
persist():可以根据情况选择各种缓存级别,(主要的)缓存级别有:

  1. MEMORY_ONLY:未序列化的对象于内存(默认级别,CPU利用率最高)
  2. MEMORY_AND_DISK:未序列化的对象于磁盘
  3. MEMORY_ONLY_SER:序列化的对象于内存(序列化对象更有利于节省空间,但是消耗CPU)
  4. MEMORY_AND_DISK_SER:序列化的对象于磁盘
    No: 磁盘仅仅在对象不适合于存储在内存中的时候存储

RDD 主要由三个部分组成,分别是:

  1. Dependency
  2. Partition
  3. Partitioner

你可能感兴趣的:(RDD(Resilient Distributed Datasets:弹性分布式数据集))