大数据之SparkCore(2)

RDD特点
RDD表示只读的分区的数据集,对RDD进行改动,只能通过RDD的转换操作,由一个RDD得到一个新的RDD,新的RDD包含了从其他RDD衍生所必须的信息,RDDs之间存在依赖,RDD的执行是按照血缘关系延时计算的.如果血缘关系较长,可以通过持久化RDD来切断血缘关系

分区

RDD逻辑上是分区的,每个分区的数据都是抽象存在的,计算的时候会通过一个compute函数得到每个分区的数据.如果RDD是通过已有的文件系统构建,则compute函数式是读取指定文系统中的数据,如果RDD是通过其他RDD转换而来,则compute函数式执行转换逻辑将其他RDD的数据进行转换

只读

RDD是只读的,要想改变RDD中的数据,只有在现有的RDD基础上创建新的RDD

由一个RDD转换到另一个RDD,可以通过丰富的操作算子实现,不再像MapReduce这样只能写map和reduce了,

RDD的操作算子包括两类,一类叫做transformations,他是用来将RDD进行转化,构建RDD的血缘关系;另一类叫做actions,它是用来触发RDD的计算,得到RDD的相关计算结果或者将RDD保存的文件系统中.下图是RDD所支持的操作算子列表

依赖

RDDs通过操作算子进行转换,转换得到新的RDD包含了从其他RDDs衍生所必需的信息RDDs之间维护着这种血缘关系,也称之为依赖.如下图所示,依赖包含两种.一种是窄依赖,RDDs之间分区是一一对应的,另一种是宽依赖,下游RDD的每个分区与上游RDD(也称之为父RDD)的每个分区都有关,是多对多的关系

通过RDDs之间的这种依赖关系,一个任务流可以描述为DAG(有向无环图),如下图所示,在实际执行过程中宽依赖对于与shuffle(图中的reduceByKey和join),窄依赖中所有转换操作可以通过类似与管道的方式一气呵成执行(图中map和union可以一起执行)

缓存(cache)

如果在应用程序中多次使用同一个RDD,可以将RDD缓存起来,该RDD只有在第一次计算的时候会根据血缘关系得到分区的数据,在后续其他地方用到该RDD的时候,会直接从缓存处取而不用再根据血缘关系计算,这样就加速后期的重用.如下图所示,RDD-1经过一系列的转换后得到RDD-n并保存到hdfs,RDD-1在这这过程中会有个中间结果,如果将其缓存到内存,name随后的RDD-1转换到RDD-m这一过程中,就不会计算其之前的RDD-0了

CherkPoint(监测点)

虽然RDD的血缘关系天然地可以实现容错,当RDD的某个分区数据失败或丢失,可以通过血缘关系重建.但是对于 长时间迭代型应用来说,随着迭代的进行,RDDs之间的血缘关系会越来越长,一旦在后续迭代过程中出错,则需要通过非常长的血缘关系去重建,势必影响性能.为此,RDD支持checkpoint将数据保存到持久化的储存重,这样就可以切断之前的血缘关系,因此,checkpoint后RDD不需要知道它的父RDDs了,它可以从checkpoint处拿到数据.

给定一个RDD我们至少可以知道一下几点信息:1.分布式及分区方式;2.由父RDDs衍生而来的相关依赖信息;3.计算每个分区的数据,计算步骤为:1)如果被韩村,则从缓存中取的分区的数据;2)如果被checkpoint,则从checkpoin处恢复数据;3)根据血缘关系计算分区的数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值