spark---- RDD算子分类 DAG shuffle stage dependency job Task TaskSet Application RDD算子之Action算子

@[TOC](文章目录)

#RDD的算子的分类

Transformation: 即转换算子,调用转换算子会生成一个新的RDD, Transformation是 Lazy 的,不会触发job执行
Action: 行动算子,调用行动算子会触发job执行, 本质上是调用了sc.runJob方法, 该方法从最后一个RDD,根据
        其依赖关系,从后往前,划分Stage,生成一个TaskSet
1.创建RDD的方法
 
(1)通过并行化方式,将Dirver端的集合转成RDD ,可以指定分区的数量

 val rdd: RDD[Int] = sc.parallelize(arr) 
 rdd.partitions.length   //查看分区数量

 (2)从HDFS指定目录创建RDD ,也可以指定分区的数量

val lines: RDD[String] = sc.textFile("hdfs://linux01:8020/log")
rdd.partitions.length   //查看分区数量     

(2.1)从hdfs中读取数据分区数量 : 默认情况下 目录文件下所有文件的 totalSize(文件总大小)/NumSplits (切片数量) 得到 goalSize()
                                                      使用 文件大小/goalSize 结果大于1.1 就分为多个切片. 
                                                      如果想要几个block块(文件)就有几个分区, 在创建rdd时指定计算goalSize的除数为1就可以了
                                                      val rdd1 = sc.textFile("hdfs://linux01:8020/wc",1)

#DAG 有向无环图

是对多个RDD转换过程和依赖关系的描述
触发Action就会形成一个完整的DAG,一个DAG就是一个Job

#shuffle

概念:需要通过网络将数据传输到多台机器,数据被打散,但是有网络传输,不一定就有shuffle

上游RDD的一个分区将数据给了下游RDD的多个分区,即是shuffle,需要注意的是,shuffle过程是下游的Task到上游拉取数据,不是上游Task发送给下游的

shuffle的功能是将具有一定规律的数据按照指定的分区器的分区规则,通过网络,传输到指定的一台机器的一个分区中即Task中

#strage

任务执行阶段
一个Stage对应一个TaskSet,有shuffle的时候就会划分Stage
一个TaskSet中的Task的数量取决于Stage中最后一个RDD分区的数量

Stage分为两种,第一种ShuffleMapStage:里面对应的Task叫ShuffleMapTask,  第二种ResultStage:里面对应的Task叫ResultTask(一定会产生结果)

#dependency

依赖关系,指的是父RDD和子RDD之间的依赖关系
窄依赖:没有shfuffle产生,多个算子会被合并到一个Task中,即在一个pipeline中
宽依赖:有shuffle产生,是划分Stage的依据

#JOB

Dirver向Executor提交的作业

触发一次Action形成一个完整的DAG,一个DAG对应一个job

一个job中有一到多个Stage,一个Stage对应一个TaskSet,一个TaskSet中有一到多个Task

#Task 

spark中任务最小的执行单元

task分类两种  ShuffleMapTask(一定会有shuffleWrite)   ResultTask(一个job中一定会有一个)

Task起始就是类的实例,有属性(从哪里读数据)  有方法(如何计算)

Task的数量决定并行,同时也要考虑可用额度cores

#TaskSet

保存同一种计算逻辑多份Task集合

一个TaskSet中的task计算逻辑都一样,计算的数据不一样

一个stage对应一个taskSet

#Application

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值