大数据面试整理-spark
spark 提交任务流程
1.客户端和Master建立链接并且申请资源,每个executor需要4g内存,总共需要12核
2.master进行资源调度(节点向master注册的时候,会将自己的资源情况一并提交给master)
3.master和worker进行RPC通信,启动executor
4.启动各个worker节点上的executor
5.executor和Driver端进行通信
6.RDD触发Action后,会根据最后这个RDD往前推断依赖关系(宽依赖或者窄依赖),遇到Shuffle就切分Stage,会递归切分,递归的出口是RDD没有父RDD
7.DAGScheduler切分完Stage后,会进行提交Stage,先提交前面的Stage,前面的Stage执行完之后再提交后面的Stage,每一个stage都会产生很多业务逻辑相同的Task,然后以TaskSet的形式将task传递给TaskScheduler,然后TaskScheduler将Task进行序列化,根据资源情况,将task发送给Executor
8.将Driver端产生的task发送给executor
9.executor在接收到task之后,先将task进行反序列化,然后将task用一个实现了runnable接口的实现类包装起来,然后将该包装类丢入线程池,包装类实现的run方法就会被执行,进而调用task的计算逻辑。
————————————————
版权声明:本文为CSDN博主「wlk_328909605」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wlk_328909605/article/details/82864877
原文链接:https://github.com/lyhue1991/eat_pyspark_in_10_days/blob/master/1-2%2C1%E5%B0%8F%E6%97%B6%E7%9C%8B%E6%87%82Spark%E7%9A%84%E5%9F%BA%E6%9C%AC%E5%8E%9F%E7%90%86.md
下图参考 B 站 uP: 是萧言呀
自己再总结一下:
RDD:是弹性分布式数据集(Resilient Distributed Dataset)的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型。
DAG:是Directed Acyclic Graph(有向无环图)的简称,反映RDD之间的依赖关系。
Driver Program:控制程序,负责为Application构建DAG图。
Cluster Manager:集群资源管理中心,负责分配计算资源。
Worker Node:工作节点,负责完成具体计算。
Executor:是运行在工作节点(Worker Node)上的一个进程,负责运行Task,并为应用程序存储数据。
Application:用户编写的Spark应用程序,一个Application包含多个Job。
Job:作业,一个Job包含多个RDD及作用于相应RDD上的各种操作。
Stage:阶段,是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段”。
Task:任务,运行在Executor上的工作单元,是Executor中的一个线程。
总结:Application由多个Job组成,Job由多个Stage组成,Stage由多个Task组成。Stage是作业调度的基本单位。
切割规则:从后往前,遇到宽依赖就切割Stage。
RDD之间的依赖关系形成一个DAG有向无环图,DAG会提交给DAGScheduler,DAGScheduler会把DAG划分成相互依赖的多个stage,划分stage的依据就是RDD之间的宽窄依赖。遇到宽依赖就划分stage,每个stage包含一个或多个task任务。然后将这些task以taskSet的形式提交给TaskScheduler运行。
一个action对应一个job,一个job多个stage,划分stage的边界是不同节点取数据,到shuffle结束,一个stage对应多个task,task由dirver发送到executor,task运行在executor中,exector运行在worker node上,exector由dirver在worker node上申请资源创建,application包括driver program和executors。(Executor 进程以多线程方式运行task,一个task就是一个线程)
原文链接:https://blog.csdn.net/lquarius/article/details/106559636
spark submit
- 客户端向master发送注册喝申请资源请求
- master和worker通讯 ,随后worker按要求启动对应executor,然后exceutor向drive申请注册, 并申请计算的task.
- Drive运行客户端的main方法
- sparkContext,spark程序入口,同时构建Dag scheduler & Task scheduler.
- 程序中大量RDD 转换和action,rdd 和 rdd 直接会生成DAG有向无环图,DAG 方向就是 rdd 的操作顺序,随后DAG 图 发给了DAG Scheduler.
- Dag scheduler 主要是划分 stage,每个stage里有很多并行的task, 这些并行task 封装再taskset 中,最后taskset 发给 Taskscheduler.
- Task scheduler 或者 taskset 集合,stage 和 stage 有依赖,task scheduler 把taskset 提交到 executor运行。
- 运行完成后,driver 向master申请注销, 随后 master 通知对应worker关闭 executor 进程 , workder 资源被释放
spark reduceByKey,groupByKey
参考博客: https://blog.csdn.net/helloxiaozhe/article/details/79462221
reduceByKey - key value 可以现计算,并应用map 函数,然后二次聚合。
groupByKey : 不接受函数, 只能先把同等key 放到一起, 再进行聚合操作。
spark 创建 RDD 的三种方式: 1. 序列号 parallelize 2.本地 sftp 3. HDFS
Dataframe 创建的三种方法:
1. 从Hive table 查询返回
2. 读取HDFS 文件
3. RDD 转换 toDF
参考Youtube:https://www.youtube.com/watch?v=26zl50iNBp8
RDD:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App