zoukankan      html  css  js  c++  java
  • (五)什么是RDD-Java&Python版Spark

    什么是RDD

    视频教程:

    1、优酷

    2、YouTube

      RDD是个抽象类,全称为Resilient Distributed Datasets,是一个容错的、并行的数据结构,可以让用户显式地将数据存储到磁盘和内存中,并能控制数据的分区。同时,RDD还提供了一组丰富的操作来操作这些数据诸如mapflatMapfilter等转换操作除此之外,RDD还提供了诸如joingroupByreduceByKey等更为方便的操作以支持常见的数据运算。但实际上继承RDD的派生类一般只要实现两个方法:

    1getPartitions()用来告知怎么将input分片;

    2compute()用来输出每个Partition被函数处理的一个单元);

    RDD的特点:

    1它是在集群节点上的不可变的、已分区的集合对象。

    2通过并行转换的方式来创建如(map, filter, join, etc)。

    3失败自动重建。

    4可以控制存储级别(内存、磁盘等)来进行重用。

    5必须是可序列化的。

    6是静态类型的。

    RDD的好处

    1RDD只能从持久存储或通过Transformation操作产生,相比于分布式共享内存(DSM)可以更高效实现容错,对于丢失部分数据分区只需根据它的lineage就可重新计算出来,而不需要做特定的Checkpoint( RDD实现了基于Lineage的容错机制。RDD的转换关系,构成了compute chain,可以把这个compute chain认为是RDD之间演化的Lineage。在部分计算结果丢失时,只需要根据这个Lineage重算即可。)

    2RDD的不变性,可以实现类似Hadoop MapReduce的推测式执行。

    3RDD的数据分区特性,可以通过数据的本地性来提高性能,这与Hadoop MapReduce是一样的。

    4RDD都是可序列化的,在内存不足时可自动降级为磁盘存储,把RDD存储于磁盘上,这时性能会有大的下降但不会差于现在的MapReduce

    RDD的存储与分区

    1用户可以选择不同的存储级别存储RDD以便重用。

    2当前RDD默认是存储于内存,但当内存不足时,RDDspilldisk

    3RDD在需要进行分区把数据分布于集群中时会根据每条记录Key进行分区(如Hash 分区),以此保证两个数据集在Join时能高效。

    RDD的内部表示

    RDD的内部实现中每个RDD都可以使用5个方面的特性来表示:

    1分区列表(数据块列表)

    2计算每个分片的函数(根据父RDD计算出此RDD

    3对父RDD的依赖列表

    4key-value RDDPartitioner(可选)

    5每个数据分片的预定义地址列表(HDFS上的数据块的地址)(可选)

    RDD创建方式:

    1、从Hadoop文件系统(或与Hadoop兼容的其它存储系统)输入(例如HDFS)创建。

    2、从父RDD转换得到新RDD

    3、通过parallelize将单机数据创建为分布式RDD

  • 相关阅读:
    让Android模拟器速度飞起来_Eclipse+BlueStacks调试Android应用【2012-10-30】
    开源镜像站-Android镜像
    字符编码的几篇文章
    [C/C++]_[Unicode转Utf8,Ansi转Unicode,Ansi文件转Utf8文件]
    MSVC下快速Unicode I/O
    edltplus使用正则表达式替换多余空行
    修改CMD的编码
    windows 安裝 gcc 編譯器
    CF369 C(递归 + 回溯)
    VIM支持系统剪切板
  • 原文地址:https://www.cnblogs.com/LgyBean/p/6251296.html
Copyright © 2011-2022 走看看