当前位置:   article > 正文

Spark运行架构,从三流java外包到秒杀阿里P7_java和spark

java和spark

数据加速运算。

Master & Worker

Spark 集群的独立部署环境中,不需要依赖其他的资源调度框架,自身就实现了资源调度的功能,所以环境中还有其他两个核心组件:Master 和Worker,这里的Master 是一个进程,主要负责资源的调度和分配,并进行集群的监控等职责,类似于Yarn 环境中的 RM, 而

Worker 呢,也是进程,一个 Worker 运行在集群中的一台服务器上,由Master 分配资源对

数据进行并行的处理和计算,类似于Yarn 环境中NM。

ApplicationMaster

Hadoop 用户向YARN 集群提交应用程序时,提交程序中应该包含ApplicationMaster,用于向资源调度器申请执行任务的资源容器Container,运行用户自己的程序任务 job,监控整个任务的执行,跟踪整个任务的状态,处理任务失败等异常情况。 也就是,ResourceManager(资源)和Driver(计算)之间的解耦合靠的就是ApplicationMaster。

核心概念

Executor 与 Core

Spark Executor 是集群中运行在工作节点(Worker)中的一个JVM 进程,是整个集群中的专门用于计算的节点。在提交应用中,可以提供参数指定计算节点的个数,以及对应的资源。这里的资源一般指的是工作节点Executor 的内存大小和使用的虚拟CPU 核(Core)数

量。

应用程序相关启动参数如下:

在这里插入图片描述

并行度(Parallelism)

在分布式计算框架中一般都是多个任务同时执行,由于任务分布在不同的计算节点进行

计算,所以能够真正地实现多任务并行执行,记住,这里是并行,而不是并发。这里我们将

整个集群并行执行任务的数量称之为并行度。那么一个作业到底并行度是多少呢?这个取决

于框架的默认配置。应用程序也可以在运行过程中动态修改。

有向无环图(DAG)

在这里插入图片描述

大数据计算引擎框架我们根据使用方式的不同一般会分为四类,其中第一类就是Hadoop 所承载的MapReduce,它将计算分为两个阶段,分别为 Map 阶段 和 Reduce 阶段。对于上层应用来说,就不得不想方设法去拆分算法,甚至于不得不在上层应用实现多个 Job

的串联,以完成一个完整的算法,例如迭代计算。 由于这样的弊端,催生了支持 DAG 框架的产生。因此,支持 DAG 的框架被划分为第二代计算引擎。如 Tez 以及更上层的 Oozie。这里我们不去细究各种 DAG 实现之间的区别,不过对于当时的 Tez 和 Oozie 来说,大多还是批处理的任务。接下来就是以 Spark 为代表的第三代的计算引擎。第三代计算引擎的特点主要是 Job 内部的 DAG 支持(不跨越 Job),以及实时计算。 这里所谓的有向无环图,并不是真正意义的图形,而是由 Spark 程序直接映射成的数据流的高级抽象模型。简单理解就是将整个程序计算的执行过程用图形表示出来,这样更直观,更便于理解,可以用于表示程序的拓扑结构。

DAG(Directed Acyclic Graph)有向无环图是由点和线组成的拓扑图形,该图形具有方

向,不会闭环。

提交流程

所谓的提交流程,其实就是我们开发人员根据需求写的应用程序通过Spark 客户端提交给Spark 运行环境执行计算的流程。在不同的部署环境中,这个提交过程基本相同,但是又

有细微的区别,我们这里不进行详细的比较,下面的提交流程是基于 Yarn 环境的。 在这里插入图片描述

Spark 应用程序提交到 Yarn 环境中执行的时候,一般会有两种部署执行的方式:Client

和Cluster。

两种模式主要区别在于:Driver 程序的运行节点位置。

Yarn Client 模式

Client 模式将用于监控和调度的Driver 模块在客户端执行,而不是在Yarn 中,所以一般用于测试。

  • Driver 在任务提交的本地机器上运行

  • Driver 启动后会和ResourceManager 通讯申请启动ApplicationMaster

  • ResourceManager 分配container,在合适的NodeManager 上启动ApplicationMaster,负责向ResourceManager 申请Executor 内存

  • ResourceManager 接到ApplicationMaster 的资源申请后会分配 container,然后

ApplicationMaster 在资源分配指定的NodeManager 上启动Executor 进程。

  • Executor 进程启动后会向Driver 反向注册,Executor 全部注册完成后Driver 开始执行

main 函数

  • 之后执行到Action 算子时,触发一个Job,并根据宽依赖开始划分 stage,每个stage 生

成对应的TaskSet,之后将task 分发到各个Executor 上执行。

Yarn Cluster 模式

Cluster 模式将用于监控和调度的 Driver 模块启动在Yarn 集群资源中执行。一般应用于

实际生产环境。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后我们该如何学习?

1、看视频进行系统学习

这几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。

另外,我自己也珍藏了好几套视频资料躺在网盘里,有需要的我也可以分享给你:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

2、读源码,看实战笔记,学习大神思路

“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。

Spring源码深度解析:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Mybatis 3源码深度解析:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Redis学习笔记:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Spring Boot核心技术-笔记:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

3、面试前夕,刷题冲刺

面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。

关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。

人生短暂,别稀里糊涂的活一辈子,不要将就。
除非是校招,否则一般不怎么会问。

关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:

[外链图片转存中…(img-G5GGVxls-1711988299017)]

只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。

人生短暂,别稀里糊涂的活一辈子,不要将就。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/739366
推荐阅读
相关标签
  

闽ICP备14008679号