RDD

RDD

**是一个 分布式、弹性、可容错的抽象数据集,代表着一个不可变的,可分区的,可以并行执行的一个集合

RDD中不保存计算的数据,保存的式元数据,即数据的描述信息和运算逻辑,比如数据要从哪里读取,怎么运算等

RDD 可以被认为是一个代理, 你对RDD 进行操作,相当于在Driver 端先是记录下计算的描述信息,然后生成Task ,将Task 调度到 Executor 端才执行真正的计算逻辑**

RDD特点

一 有多个分区,分区数量决定任务并行数

① 从HDFS 中读取 :
1)如果是从HDFS中读取数据,分区的数量由hdfs 中数据的输入切片数量决定

2)sc.textFile 可以指定 rdd 的分区数量

3)sc.textFile 最小的分区数量为2

4) 如果一个大文件 ,一个小文件 ,大文件大于小文件的1.1倍 ,大文件会有 2 个输入切片

5) 当分区的数量大于切片的数量,多个Task可以读取一个输入切片; 当分区的数量小于切片的数量,RDD分区的数量由切片的数量决定

② 将Driver 端集合并行化成 RDD

1)RDD 默认分区的数量由 total-executor-cores 决定

2) 可以在sc.parallelize (arr ,6 )指定分区的数量

3)makeRDD 底层调用的是 parallelize 方法


一个功能函数作用在分区上,函数决定计算逻辑


RDD 和RDD 存在依赖关系,可以根据依赖关系恢复失败的任务和划分Stage


如果发生Shuffle ,要使用分区器 ,默认使用HashPartitioner ,分区器决定数据到下游哪个分区

五 最有位置
即 将Executor 调度到数据所在的节点上,要求Worker 和 DataNode 部署在同一个节点或OnYarn ,通过访问NameNode 获取数据块 位置信息

(分区和分区器的区别)

分区是 决定了RDD 有多少并行度,决定了一个Stage里面有多少Task

分区器是 在shuffle 的时候 决定每一个分区里面的每一条数据 要落到下游的哪一个分区,默认使用的是 HashPartitioner

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值