开发者学堂课程【大数据 Spark2020最新课程(知识精讲与实战演练)第一阶段:Spark 集群搭建_Spark 集群结构】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/688/detail/11937
Spark 集群搭建_Spark 集群结构
在搭建一个 Spark 集群之前先去了解一下Spark 集群的结构,了解完 Spark 集群的结构以后会对Spark的原理,有一些粗浅的认识,这时再去搭建这个集群,就更容易去记忆那些步骤。
Spark 集群结构了解过了以后,要进行 Spark 集群的这个搭建,在搭建这个Spark集群以后,这时集群其实并不是一个特别完整的一个集群,那是不是要进行高可用配置完了以后, Spark 的集群就已经是没有问题了,是一个可以使用的集群了,可以先去运行一个入门的案例来去测试一下。
运行案例测试集群:
Spark 集群搭建部分有四个步骤。
接下来就进入到第一个步骤,就是Spark集群的这个结构。现在切回到的笔记当中,在整个环节之前解决问题
Spark 如何把一个程序跑在一个集群当中的问题:
这个问题的本质,其实是解决如何去管理一个数以千计的规模的一个集群,这个工作一般都会有一些现成的工具来帮完成。
Cluster Mnanger :
刚才所说的一个现场的工具,就是这些 Cluster Manager,有一些工具能够帮助去管理集群这些工具。
先举一个小例子,比如说 Yarn 就是一个集群的管理工具, Yarn 在逻辑上分为 Resource Manager 和 node manager 两个部分啊除了 Yarn 在大数据领域里面还有一个比较知名的叫做 Mesos ,还有一个,最近比较火的叫作 Kubernetes ,除了三个外部的这个集群管理工具以外,Spark 还支持一个叫做 Standalone 的一个自身的一个集群管理工具。
所以 Spark 是支持四个集群管理工具的好,这些集群管理工具,就能够做到像是使用一个计算机一样,使用一整个集群。
在提交这个任务的时候,会先通过 Spark 的这个 client 来去接收提交过来的程序,把这个程序划分为很小很细的一些 task 一些任务,把这些把这些任务提交给这个 Clustermanager 。
Clustermanager 就负责帮忙把这个任务提交到集群当中去运行,这是整个的流程。
运行和运行位置的问题:
假设在集群里面有这样的一个主机,这个主机里面,应该有一个称之为叫做守护进程的一个东西,就是可以和 Cluster Manager 之间保持一个心跳,或者保持一些关联,等有任务提交过来以后, Cluster Manager 可以把这个任务放入这个守护进程当中去运行,守护进程负责把这个程序,把这个任务在它所运行的这个计算机里面去运行,对于 Yarn 来说,Cluster Manager 可能就是类似于 Resource Manager 的那个组成,这个守护进程,就是 Yarn 当中的 Node Manager。
下面对整个图再进行一些扩展,把把里面的概念去确定
首先分为三个部分:
第一部分是client部分
第二个部分是 Cluster Manager部分
第三个部分是集群部分
Client :
暂且认为该叫 Driver,但是 Driver 并不是一个完整的 Cluster ,这个 Cluster 的还有一些其它的工具。
Cluster Manager :
可以刚才所说的那四种集群管理工具。 Cluster Manager 管理的其实是 Worker ,如果要去运行一个程序,并不是是直接在 Worker 这样的一个守护进程当中去运行而是在 Worker 它所启动的 Executor 当中去运行的,这是一个大致的一个运行情况。
Driver:
Driver就是用于去运行 Spark ,卖方法的,这样的一个组件,这个组件,是它的的主要任务,是帮助创建一些所运行程序的一些必备的依赖,比如说 Spark Context 这样的一个上下文对象,然后去把程序划分为不同的任务,并且把这些任务提交给 Cluster Manager 去运行好,Cluster Manager 是和外部集群打交道的一个工具,帮助运行 Task,Worker 就是对应的集群当中的每一个主机, Worker 本质上是一个守护进程,负责启动这个 Executor
Executor:
就是运行程序的运行 Task 的那个节点,那个程序
比如说一个 JVM 的虚拟机可以运行的一个Task,这个 JVM 有可能就是一个 Executor。
还是这张图,更细节的流程,首先,第一步肯定还是要去启动的这个 Driver,这个 Driver 启动了以后, Spark 才能够去运行, Driver 会接收提交过来的这个程序,然后,会去创建 Spark Session,通过这个 Spark Session 可以把这个程序,划分为不同的这个 Task 接下来 Driver ,会向 Cluster Manager 去申请集群的这个资源资源申请完毕了以后,那在 Worker 里头会启动对应的 Executor ,当这个 Exescutor 启动好以后,Driver Program 就会把对应的 Task 运行到 Executor
当中。