大数据之spark_spark运行结构剖析

本文探讨了Spark中的核心组件RDD,包括其分布式、弹性特性和计算逻辑。阐述了DAG的概念,作为RDD转换依赖的可视化模型,以及Task、TaskSet、Stage和Job的分工协作。讲解了Shuffle在数据分布中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本概念

RDD

	概念:分布式、弹性、可容错的抽象数据集
	特点
		1.有多个分区,分区数量决定任务并行数
			从HDFS中读取
				如果是从HDFS中读取数据,分区的数量由hdfs中数据的输入切片数量决定
				sc.textFile可以指定rdd的分区数量(textFile会生成两个RDD,一个是HadoopRDD负责读取数据,读取到
				的数据是k,v类型的,然后内部又调用了一个MapPartitionsRDD,将k的偏移量去掉,只保留v数据,
				saveAsTextFile中也有一个RDD,因为它也调用了MapPartitionsRDD,将我们想存进去的数据变成k,v
				类型的,使用hadoop的TextOutPutFormat将数据写入到hdfs中)
				sc.textFile最小的分区数量为2
				如果一个大文件,一个小文件,大文件大于小文件的1.1倍,大文件会有2个输入切片
				当分区的数量大于切片的数量,多个Task可以读取一个输入切片;当分区的数量小于切片的而数量,
				RDD分区的数量由切片数量决定
			将Driver端集合并行化成RDD
				RDD默认分区的数量由total-executor-cores决定
				可以在sc.parallelize(arr, 6)指定分区的数量
				makeRDD底层调用的是parallelize方法
		2.一个功能函数作用在分区上,函数决定计算逻辑
		3.RDD和RDD存在依赖关系,可以根据依赖关系恢复失败的任务和划分Stage
		4.如果要发生Shuffle,要使用分区器,默认使用HashPartitioner,分区器决定数据到下游哪个分区
		5.最优位置,即将Executor中的Task调度到数据所在的节点上,要求Worker和DataNode部署在同一节点
		或OnYarn,通过访问NameNode获取数据块位置信息
	到底什么是RDD
		是一个抽象数据集,RDD中不保存要计算的数据,保存的是元数据(描述信息),即数据的描述信息和运
		算逻辑,比如数据要从哪里读取,怎么运算等
		RDD可以认为是一个代理,你对RDD进行操作,相当于在Driver端先是记录下计算的描述信息,然后生成
		Task,将Task调度到Executor端才执行真正的计算逻辑
		在写代码时,new的对象,实际也是在Driver端new出来的,只是处理数据时,Driver生成Task将该对象也赋予
		Task发送过去了

DAG

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

Task

	概念:Spark中任务最小的执行单元
	Task分类两种
		ShuffleMapTask
			可以读取各种数据源的读数据
			也可以读取shuffle后的数据
			专门为shuffle做准备
		ResultTask
			可以读取各种数据源的读数据
			也可以读取shuffle后的数据
			专门为了产生计算结果
			如果一个Job中只有一个stage那么该stage中的Task就是ResultTask
	Task其实就是类的实例
		有属性
			从哪里读取数据
		有方法
			如何计算
	Task的数量决定决定并行,同时也要考虑可用的cores

TaskSet

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

Stage

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

dependency

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

Shuffle

	概念:需要通过网络将数据传输到多台机器,数据被打散,但是有网络传输,不一定就有shuffle
	上游RDD的一个分区将数据给了下游RDD的多个分区,即是shuffle,需要注意的是,shuffle过程是下游的
	Task到上游拉取数据,不是上游Task发送给下游的
	Shuffle的功能是将具相一定规律的数据按照指定的分区器的分区规则,通过网络,传输到指定地一台机器的
	一个分区中即Task中

Job

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

Application

	使用SparkSubmit提交的个计算应用
	一个Application中可以触发一到多次Action,触发一次Action形成一个DAG,一个DAG对应一个Job
	一个Application中可以有一到多个Job

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值