RDD概念、特性、缓存策略与容错

本文深入探讨了Spark中的RDD(弹性分布式数据集)概念,包括其分布式、弹性特点。文章详细介绍了RDD的五个主要特性,并通过源码解析展示了RDD的缓存策略,如StorageLevel的不同选项。此外,文章还讨论了RDD的Lineage(血统)和容错机制,阐述了如何通过缓存和checkpoint实现容错。
摘要由CSDN通过智能技术生成

一、RDD概念与特性

1. RDD的概念

  RDD(Resilient Distributed Dataset),是指弹性分布式数据集。数据集:Spark中的编程是基于RDD的,将原始数据加载到内存变成RDD,RDD再经过若干次转化,仍为RDD。分布式:读数据一般都是从分布式系统中去读,如hdfs、kafka等,所以原始文件存在磁盘是分布式的,spark加载完数据的RDD也是分布式的,换句话说RDD是抽象的概念,实际数据仍在分布式文件系统中;因为有了RDD,在开发代码过程会非常方便,只需要将原始数据理解为一个集合,然后对集合进行操作即可。RDD里面每一块数据/partition,分布在某台机器的物理节点上,这是物理概念。弹性:这里是指数据集会进行转换,所以会忽大忽小,partition数量忽多忽少。

2. RDD的特性

  Spark-1.6.1源码在org.apache.spark.rdd下的RDD.scala指出了每一个RDD都具有五个主要特点,如下:

  • A list of partion

  RDD是由一组partition组成。例如要读取hdfs上的文本文件的话,可以使用textFile()方法把hdfs的文件加载过来,把每台机器的数据放到partition中,并且封装了一个HadoopRDD,这就是一个抽象的概念。每一个partition都对应了机器中的数据。因为在hdfs中的一个Datanode,有很多的block,读机器的数据时,会将每一个block变成一个partition,与MapReduce中split的大小由min split,max split,block size (max(min split, min(max split, block size)))决定的相同,spark中的partition大小实际上对应了一个split的大小。经过转化,HadoopRDD会转成其他RDD,如FilteredRDD、PairRDD等,但是partition还是相应的partition,只是因为有函数应用里面的数据变化了。

  • A function for computing each split

  对每个split(partition)都有函数操作。一个函数应用在一个RDD上,可以理解为一个函数对集合(RDD)内的每个元素(split)的操作。

  • A list of dependencies on other RDDs

  一个RDD依赖于一组RDD。例如,下列代码片段

val lines=sc.textFlie("hdfs://namenode:8020/path/file.txt")
val wc=lines.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).sortBy(_._2)
wc.foreach(println)
sc.stop()

  这里就存在RDD的依赖关系。

  • Optionally, a Partitioner for key-value RDDs

  该可选项意思是对于一个RDD,如果其中的每一个元素是Key-Value形式时,可以传一个Partitioner(自定义分区),让这个RDD重新分区。这种情况的本质是shuffle,多点到多点的数据传输。

  • Optionally, a list of preferred locations to compute each split on

  textFile()过程中,可以指定加载到性能好的机器中。例如,hdfs中的数据可能放在一大堆破旧的机器上,hdfs数据在磁盘上,磁盘可能很大,CPU、内存的性能很差。Spark默认做的事情是,把数据加载进来,会把数据抽象成一个RDD,抽象进来的数据在内存中,这内存指的是本机的内存,这是因为在分布式文件系统中,要遵循数据本地性原则,即移动计算(把函数、jar包发过去)而不移动数据(移动数据成本较高)。而一般hdfs的集群机器的内存比较差,如果要把这么多数据加载到烂机器的内存中,会存在问题,一是内存可能装不下,二是CPU差、计算能力差,这就等于没有发挥出spark的性能。在这种情况下,Spark的RDD可以提供一个可选项,可以指定一个preferred locations,即指定一个位置来加载数据。这样就可以指定加载到性能好的机器去计算。例如,可以将hdfs数据加载到Tachyon内存文件系统中ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值