大数据之spark_spark之RDD的使用

什么是RDD

RDD的全称为Resilient Distributed Dataset,是一个弹性、可复原的分布式数据集,是Spark中最基本的抽象,是一个不可变的、有多个分区的、可以并行计算的集合。RDD中并不装真正要计算的数据,而装的是描述信息,描述以后从哪里读取数据,调用了用什么方法,传入了什么函数,以及依赖关系等。

RDD的特点

有一些列连续的分区:分区编号从0开始,分区的数量决定了对应阶段Task的并行度
有一个函数作用在每个输入切片上: 每一个分区都会生成一个Task,对该分区的数据进行计算,这个函数就是具体的计算逻辑
RDD和RDD之间存在一些列依赖关系:RDD调用Transformation后会生成一个新的RDD,子RDD会记录父RDD的依赖关系,包括宽依赖(有shuffle)和窄依赖(没有shuffle)
(可选的)K-V的RDD在Shuffle会有分区器,默认使用HashPartitioner
(可选的)如果从HDFS中读取数据,会有一个最优位置:spark在调度任务之前会读取NameNode的元数据信息,获取数据的位置,移动计算而不是移动数据,这样可以提高计算效率。

RDD的算子分类

Transformation:即转换算子,调用转换算子会生成一个新的RDD,Transformation是Lazy的,不会触发job执行。

Action:行动算子,调用行动算子会触发job执行,本质上是调用了sc.runJob方法,该方法从最后一个RDD,根据其依赖关系,从后往前,划分Stage,生成TaskSet。

Spark中的一些重要概念

Application
客户端使用SparkSubmit提交的个计算应用,一个Application中可以触发多次Action,触发一次Action产生一个Job,一个Application中可以有一到多个Job

Job
Driver向Executor提交的作业,触发一次Acition形成一个完整的DAG,一个DAG对应一个Job,一个Job中有一到多个Stage,一个Stage中有一到多个Task

DAG
概念:有向无环图,是对多个RDD转换过程和依赖关系的描述,触发Action就会形成一个完整的DAG,一个DAG对应一个Job

Stage
概念:任务执行阶段,Stage执行是有先后顺序的,先执行前的,在执行后面的,一个Stage对应一个TaskSet,一个TaskSet中的Task的数量取决于Stage中最后一个RDD分区的数量

Task
概念:Spark中任务最小的执行单元,Task分类两种,即ShuffleMapTask和ResultTask
Task其实就是类的实例,有属性(从哪里读取数据),有方法(如何计算),Task的数量决定决定并行度,同时也要考虑可用的cores

TaskSet
保存同一种计算逻辑多个Task的集合一个TaskSet中的Task计算逻辑都一样,计算的数据不一样

RDD的数量分析

在这里插入图片描述
读取hdfs中的目录有两个输入切片,最原始的HadoopRDD的分区为2,以后没有改变RDD的分区数量,RDD的分区都是RDD
注意:textFile方法会生成两个RDD,一个用于读取文件,另一个调用map方法将读取到的k(偏移量),v(一行数据),中的k给移除掉,saveAsFile也会生成一个Task
在调用reduceByKey方法时,有shuffle产生,要划分Stage,所有有两个Stage
第一个Stage的并行度为2,所以有2个Task,并且为ShuffleMapTask。第二个Stage的并行度也为2,所以也有2个Task,并且为ResultTask,所以一共有4个Task

创建RDD的方法

1.通过并行化方式,将Driver端的集合转成RDD

val rdd1: RDD[Int] = sc.parallelize(Array(1,2,3,4,5,6,7,8))

//也可以在创建时,指定集合中数据的分区数量,不指定就默认按Executor的最大核数分区
val rdd2: RDD[Int] = sc.parallelize(Array(1,2,3,4,5,6,7,8),4)

//还可以使用makeRDD方法创建RDD
val rdd3: RDD[Int] = sc.makeRDD(Array(1,2,3,4,5,6,7,8),4)

//创建出来的RDD可以使用partitions.length查看分区数量
val length = rdd1.partitions.length

2.从HDFS指定的目录创建RDD

val lines: RDD[String] = sc.textFile("hdfs://node-1.51doit.cn:9000/log")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值