Spark编程核心:RDD—1,RDD入门及概念

Spark编程核心:RDD—1,RDD入门及概念。

RDD简介:

Spark对数据的核心抽象:弹性分布式数据集(Resilient Distributed Dataset,简称RDD)在Spark中,对数据的所有操作都是通过使用RDD来完成的。他是MapReduce的扩展和延伸,并解决了MapReduce的缺陷:在并行计算阶段高效的进行数据共享,且Spark会自动的将RDD中数据分发到集群上。
(注:RDD实际上是不存储数据的,他是一个抽象概念!如果有人问你RDD中的数据能不能改,一定要回答:NO!)

RDD的五大特性:

1、 RDD由一系列的partition组成
2、 每一个函数或者说算子实际上是作用在每一个partition上
3、 RDD之间互相依赖,依赖关系(又叫做血统Lineage)有助于计算的容错
4、(可选)分区器实际上是作用在K-V格式的RDD上。分区器发生在shuffer的writer阶段,决定了每一条记录要写入哪个分区 (K-V格式的RDD:如果RDD中是二元组对象,那他就是K-V格式)
5、 每一个RDD都会提供最佳的计算位置,这有利于计算数据本地化,符合大数据计算原则——计算向数据移动

RDD中默认partition的个数:

如果从HDFS中取数据,textFile引用的是MR的方法,这意味着block数=split数=partition数。此外默认的partition数量等于程序分配的CPU核心数量

RDD的宽窄依赖概念:

窄依赖(Narrow Dependencies):父RDD的每个分区只被子RDD的一个分区所使用,子RDD分区通常对应常数个父RDD分区。不会有shuffle的产生。
宽依赖(Wide Dependencies):父RDD与子RDD partition之间的数据关系是一对多。会有shuffle的产生
在这里插入图片描述

RDD的操作类型:

1、 创建操作:用于RDD的创建工作。Spark提供了两种创建RDD的方式:第一种,读取外部数据(来自内存和外部存储系统),第二种,原RDD通过转换生成新RDD。
2、 转换操作:将RDD通过一定的操作转换成新的RDD,例如HadoopRDD可以使用map操作变换成MapperedRDD,RDD的转换操作是一种惰性求值,他只定义了一个新的RDD,并没有执行。
3、 控制操作:将RDD持久化,可以将RDD存在磁盘或内存中。
4、 行动操作:能够触发Spark运行的操作,例如对RDD进行collect就是行动操作。Spark的行动操作分为两大类:一类是将操作结果编程Scala集合或变量,另一种是将RDD保存到外部文件系统中。

惰性求值:

RDD的转化操作都是惰性求值的。这意味着进行行动操作之前Spark不会进行计算。这样可以把一些操作合并起来减少计算数据的步骤。

Spark的任务执行流程:

Spark编程中要写一个驱动程序(Driver)来连接到工作进程(Worker)。驱动程序定义一个或多个RDD及相关行动操作,驱动程序同时记录依赖关系(血统)。而工作进程是一直运行的进程,他将一系列操作过后的RDD分区保存在内存中。
在这里插入图片描述

Driver的作用:

1、 分发任务
2、 收集每一个任务的计算结果
注意:一般不会把任务的计算结果直接存储到Driver中,这可能会造成内存溢出(Memory Overflow),很危险。一般会把计算结果存储在集群外部。
3、 如果task执行失败,会重试。
4、 得出结论:Driver会与计算节点频繁通信,如果Driver崩溃后果很严重。因此是否把计算结果存储在Driver节点的内存中,由程序决定。

内存管理:

Spark提供了三种持久化RDD的存储策略:未序列化的Java对象在内存、序列化的数据存在内存和磁盘。当内存不足时,系统会从最近最少使用的RDD回收其一个分区的空间,除非这个RDD是新增加分区对应的RDD。因为大部分操作会在一个RDD的所有分区上进行,因此已经存在内存中的分区很有可能再次使用。

检查点:

虽然血统可以恢复错误的RDD,但是对于长血统或者宽依赖特多的RDD来说,耗时依旧很长(宽依赖关系的血统,单个节点失效可能导致这个RDD的所有祖先丢失部分分区,需要整体重新计算。)因此需要通过检查点来保存到外部存储中。Spark提供为RDD设置检查点的API,由于RDD的只读性,所以不需要关心数据一致性问题。

RDD小实战——大数据中的"Hello World":WordCount

java版

import org.apache.spark
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值