1.什么是分布式计算
-
分布式程序:Mapreduce,Spark程序
1) 多进程:一个程序由多个进程共同实现,不同进程可以运行在不同的机器上
2)每个进程负责计算的数据是不一样的,都是整体数据的某一部分
分布式资源
3)自己基于MapRedeuce或者Spark的api开发的程序。
这部分主要关心数据处理的逻辑,它如何将提交的程序分成不同的进程运行。- MapReduce: MapTask进程:由分片规则决定,基于处理的数据做计算。将文件分成多个分片,并且128M作为一个分片。
ReduceTask进程:指定 - Spark:下面说明
- MapReduce: MapTask进程:由分片规则决定,基于处理的数据做计算。将文件分成多个分片,并且128M作为一个分片。
-
分布式资源:Yarn,Standalone、K8s等资源容器
1)将多台机器的物理资源:CPU、内存、磁盘从逻辑上合并为一个整体
2)Yarn:每个NameNode管理每台机器的资源,ResouceManager管理所有的NameNode
3)Standalone:Spark自带的资源管理程序,使用Master和Worker。 -
实现统一的资源管理
使用Yarn进行资源管理。因为Yarn作为统一的资源管理平台,不论是MR,Spark还是Flink都能在上面运行,而类似Standalone的资源管理平台只能在Spark上运行,不具备统一性。所以使用Yarn作为统一的资源管理平台能够降低开销成本。
2.Spark on Yarn模式下运行一个程序的据体流程(Standalone模式下ResourceManager为Master,NodeManager为Worker):
1)(SparkContex)首先启动Drive,Driver在任务提交的本地机器上运行,Driver启动后会和ResourceManager通讯申请启动ApplicationMaste
2)然后ResouceManager通知NodeManager构建一个容器启动ApplicationMaster,ApplicationMaster的功能相当于一个ExecutorLaucher,只负责向ResourceManager申请Executor内存
3)ApplicationMaste再向Diver确认需要多少资源,确认好资源需求后告知ResouceManager,ResouceManager检查资源是否充足,没有问题后告知ApplicationMaste通知各个NodeManager启动Excuter进程
4)Excuter启动后向Driver申请反向注册形成连接关系(之所以需要反向注册是因为Driver需要和Excuter形成通讯,知道目前资源的使用情况,即时的分配Task)
5)Excuter全部注册完成后,Driver根据提交的程序执行main函数
6)Driver和一行一行的执行代码,对TransfomationRDD进行懒加载,直至触发ActionRDD,形成一个Job,然后基于DAG Scheduler将Job划分出具体的逻辑Task,形成TaskSet(这是一个Task集合,每个Task都会有一个编号,之后Excuter基于任务编号的大小执行Task),这个集合是基于分区和宽窄依赖形成,通过宽依赖(Shuffle)产生不同的Stage,每个Stage内部又基于Stage中RDD的最大分区形成不同的内存迭代计算管道,这些内存迭代计算管道就是具体要执行的Task。之后基于Task Scheduler将DAG Scheduler产生的的逻辑Task分配到物理的Excuter上运行,并对它们进行监控实时反馈给Excutor。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)