Spark理论学习

sparkAPI @zhouhonglin

1.RDD

弹性分布式数据集:
RDD是由多个partition组成
最小单位是partition:与读取的block是一一对应的. 有多少个block就有多少个partion.
算子就是函数:作用再rdd的partition上的.
对弹性的理解:某个RDD损坏了,可以进行恢复.他们直接有依赖关系
分区器是作用在kv格式RDD上很难理解
partition提供数据计算的最佳位置,利用数据处理的本地化
计算移动,数据不移动

2.相关问题:

1. 什么是KV格式的RDD,
	RDD中的数据是一个个tuple2数据,那么就是kv格式的数据
2.Spark读取hdfs数据的方法:textFile.底层是调用MR读取HDFS的方法,首先会split,每个split对应一个一个block,每个split对应生产RDD的每个parttition.
3.哪里体现了RDD的弹性:容错
	RDD之间有依赖关系,
	RDD的分区,parttiton可多可少
4,哪里体现了分布式:
	RDD的partition分布在多个节点上

3.spark的执行原理

Driver: 负责发送任务和回收任务,
Worker:负责进行数据操作

4.算子

多个RDD组成一个有向无环图
1. 懒执行算子:
	只有在遇到行动算子的时候,才会触发懒执行算子
	sparkapplication是由多个jab组成的
	每个行动算子,触发一个job
	算子:
	map
	filter
	flatMap
	sample
	reduceByKey
	groupByKey
	union
	join
	规律总结:懒执行算子,都是由RDD转换为RDD
2.行动算子 
	算子:
	count
	collect
	reduce

5.持久化算子

--cache:默认将数据存储在内存中,懒执行
--persist:可以手动指定持久化级别
-- 	cache和persist都是懒执行,最小的持久化单位是partition.
---cache和persist之后就可以直接赋值给一个值,后面不可以紧跟行动算子

6.宽窄依赖

Application:基于Spark的用户程序,包含了driver程序和运行在集群上的excutor程序,依据宽窄依赖进行划分。
窄依赖:一对一的依赖,称为窄依赖 ,多对一
宽依赖:一对多:存在与多个节点的数据传输
spark用在迭代的场景,会很快,没有用在迭代的场景,和,mapreduce没什么区别
spark处理数据的模式,pipiline管道处理模式, 
一个stage由多个并行的task
stage的并行度是谁决定的?
	由stage中的finalpartition的个数决定的
管道中的数据何时可以落地?
	shuffle write的时候落地,
	对RDD进行持久化的时候,落地
如何提高Stage的并行度
	reduceByKey

7. 资源调度和任务调度

源码:

任务调度
计算模式图

在这里插入图片描述

资源调度图和任务调度
资源调度是粗粒度的调用:spark:application启动之前首先将所有的资源都申请完毕,如果申请不到,则一直处于等待状态,一直到申请到资源为止,必须一次申请完毕后,才会执行任务,这样,task的我执行效率,task快了,job快了,job快了,application就快了,必须最后一个task执行完毕后,才会释放所有资源。
优点:执行速度快
缺点:容易造成资源的浪费
细粒度资源shenq:MR
与粗粒度相反

在这里插入图片描述

算子

1.maPartitionWithIndex算子
输入一个索引和迭代器,输入一个迭代器

在这里插入图片描述

2. repartiton:可以增多分区,也可以减少分区
是一个宽依赖的算子,会产生shuffer
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值