rdd

Spark是一个通用且高速的大数据处理引擎,它采用了内存计算技术和DAG执行技术,大大提高了大数据处理速度,其效率在某些情况下是hadoop mapreduce引擎的10倍到100倍。此外,Spark还内建了例如MLlib,Spark SQL, Spark Streaming,GraphX等工具,为用户提供了高效的机器学习、SQL查询、流式计算和图计算解决方案。用户可以通过Scala,java,python语言编写Spark应用,也可以通过SparkR工具利用R语言使用Spark。而分布式内存文件系统Tachyon为诸如hadoop mapreduce,Spark等计算框架提供了内存级的文件访问速度。

RDD是Spark的最基本抽象,是对分布式内存的抽象使用,实现了以操作本地集合的方式来操作分布式数据集的抽象实现。RDD是Spark最核心的东西,它表示已被分区,不可变的并能够被并行操作的数据集合,不同的数据集格式对应不同的RDD实现。RDD必须是可序列化的。RDD可以cache到内存中,每次对RDD数据集的操作之后的结果,都可以存放到内存中,下一个操作可以直接从内存中输入,省去了MapReduce大量的磁盘IO操作。这对于迭代运算比较常见的机器学习算法, 交互式数据挖掘来说,效率提升比较大.

 

  • RDD的特点:

    1. 它是在集群节点上的不可变的、已分区的集合对象。
    2. 通过并行转换的方式来创建如(map, filter, join, etc)。
    3. 失败自动重建。
    4. 可以控制存储级别(内存、磁盘等)来进行重用。
    5. 必须是可序列化的。
    6. 是静态类型的。
  • RDD的好处

    1. RDD只能从持久存储或通过Transformations操作产生,相比于分布式共享内存(DSM)可以更高效实现容错,对于丢失部分数据分区只需根据它的lineage就可重新计算出来,而不需要做特定的Checkpoint。
    2. RDD的不变性,可以实现类Hadoop MapReduce的推测式执行。
    3. RDD的数据分区特性,可以通过数据的本地性来提高性能,这与Hadoop MapReduce是一样的。
    4. RDD都是可序列化的,在内存不足时可自动降级为磁盘存储,把RDD存储于磁盘上,这时性能会有大的下降但不会差于现在的MapReduce。
  • RDD的存储与分区

    1. 用户可以选择不同的存储级别存储RDD以便重用。
    2. 当前RDD默认是存储于内存,但当内存不足时,RDD会spill到disk。
    3. RDD在需要进行分区把数据分布于集群中时会根据每条记录Key进行分区(如Hash 分区),以此保证两个数据集在Join时能高效。

特性:

1)分区列表

2)计算每个分片的函数

3)对父RDD的一组依赖

4)对Key-Value数据类型RDD的分区器,用户可以指定分区策略和分区数

5)每个数据分区的地址列表(如HDFS上的数据块的地址)

原文地址:https://www.cnblogs.com/catcoding/p/5143544.html