七、部署详解“

提交作业和执行任务,需要几个关键组件:客户端()、作业管理器()和任务管理器()。我们的代码由客户端获取并做转换,之后提交给。所以就是集群里的“管事人”,对作业进行中央调度管理;而它获取到要执行的作业后,会进一步处理转换,然后分发任务给众多的。这里的,就是真正“干活的人”,数据的处理操作都是它们来做的。

”“

是一个非常灵活的处理框架,它支持多种不同的部署场景,还可以和不同的资源管理平台方便地集成。所以接下来我们会先做一个简单的介绍,让大家有一个初步的认识,之后再展开讲述不同情形下的部署。

”7.1 快速启动一个集群7.1.1 环境配置

是一个分布式的流处理框架,所以实际应用一般都需要搭建集群环境。我们在进行安装部署的学习时,需要准备3台机器。具体要求如下:

系统环境为 7.5版本。

安装Java 8。

安装集群,建议选择 2.7.5以上版本。

配置集群节点服务器间时间同步以及免密登录,关闭防火墙。

本书中三台服务器的具体设置如下:

节点服务器1,IP地址为192.168.10.100,主机名为。

节点服务器2,IP地址为192.168.10.101,主机名为。

节点服务器3,IP地址为192.168.10.102,主机名为。

”7.1.2 本地启动

最简单的启动方式,其实是不搭建集群,直接本地启动。本地部署非常简单,直接解压安装包就可以使用,不用进行任何配置;一般用来做一些简单的测试。

具体安装步骤如下:

进入官网,下载1.13.0版本安装包-1.13.0-bin-.12.tgz,注意此处选用对应版本为 2.12的安装包。

在节点服务器上创建安装目录/opt/,将安装包放在该目录下,并执行解压命令,解压至当前目录。

$ tar -zxvf -1.13.0-bin-.12.tgz -C /opt//-1.13.0/-1.13.0/log/-1.13.0/-1.13.0/lib/……

进入解压后的目录,执行启动命令,并查看进程。

$ cd -1.13.0/$ bin/-.sh . on host . on host .$ jps Jps

启动成功后,访问http://:8081,可以对集群和任务进行监控管理,如图所示。

关闭集群如果想要让集群停止运行,可以执行以下命令:

$ bin/stop-.sh (pid: ) on host . (pid: ) on host .

7.1.3 集群启动

可以看到,本地启动非常简单,直接执行-.sh就可以了。如果我们想要扩展成集群,其实启动命令是不变的,主要是需要指定节点之间的主从关系。

是典型的-架构的分布式数据处理框架,其中角色对应着,角色则对应。我们对三台节点服务器的角色分配如表所示。

集群角色分配

节点服务器角色

具体安装部署步骤如下:

下载并解压安装包

具体操作与上节相同。

修改集群配置进入conf目录下,修改-conf.yaml文件,修改.rpc.参数为,如下所示:

$ cd conf/$ vim -conf.yaml.rpc.:

这就指定了节点服务器为节点。

修改文件,将另外两台节点服务器添加为本集群的节点,具体修改如下:

$ vim

这样就指定了和为节点。

另外,在-conf.yaml文件中还可以对集群中的和组件进行优化配置,主要配置项如下:

...size:对进程可使用到的全部内存进行配置,包括JVM元空间和其他开销,默认为,可以根据集群规模进行适当调整。...size:对进程可使用到的全部内存进行配置,包括JVM元空间和其他开销,默认为,可以根据集群规模进行适当调整。.:对每个能够分配的Slot数量进行配置,默认为1,可根据所在的机器能够提供给的CPU数量决定。所谓Slot就是中具体运行一个任务所分配的计算资源。.任务执行的默认并行度,优先级低于代码中进行的并行度配置和任务提交时使用参数指定的并行度数量。关于Slot和并行度的概念,我们会在下一章做详细讲解。

分发安装目录

配置修改完毕后,将安装目录发给另外两个节点服务器。

$ scp -r ./-1.13.0 @:/opt/$ scp -r ./-1.13.0 @:/opt/

启动集群在节点服务器上执行-.sh启动集群:

$ bin/-.sh . on host . on host . on host .

[@ -1.13.0]$ jps Jps [@ -1.13.0]$ jps Jps [@ -1.13.0]$ jps Jps

访问Web UI

启动成功后,同样可以访问http://:8081对集群和任务进行监控管理,如图所示。

这里可以明显看到,当前集群的数量为2;由于默认每个的Slot数量为1,所以总Slot数和可用Slot数都为2。

7.1.4 向集群提交作业

在上一章中,我们已经编写了词频统计的批处理和流处理的示例程序,并在开发环境的模拟集群上做了运行测试。现在既然已经有了真正的集群环境,那接下来我们就要把作业提交上去执行了。

本节我们将以流处理的程序为例,演示如何将任务提交到集群中进行执行。具体步骤如下。

程序打包在我们编写的入门程序的pom.xml文件中添加打包插件的配置,具体如下:

.../--/.0.0/-with-///-/id//goal//////

插件配置完毕后,可以使用IDEA的工具执行命令,出现如下提示即表示打包成功。

[INFO] -----------------------------------------------------------------------[INFO] [INFO] -----------------------------------------------------------------------[INFO] time: 21.665 s[INFO] at: 2025-06-:21:26+08:00[INFO] : 141M/770M[INFO] -----------------------------------------------------------------------

命令行提交作业

除了通过WEB UI界面提交任务之外,也可以直接通过命令行来提交任务。这里为方便起见,我们可以先把jar包直接上传到目录-1.13.0下

在中执行以下命令启动。进入到的安装路径下,在命令行使用 run命令提交作业。

$ bin/ run -m :8081 -c com.. ./-1.0-.jar --host --port 7777

这里的参数 –m指定了提交到的,-c指定了入口类。

在浏览器中打开Web UI,http://:8081查看应用执行情况,如图所示。

用输入数据,可以在的标准输出()看到对应的统计结果。

在log日志中,也可以查看执行结果,需要找到执行该数据任务的节点查看日志。

$ cat ---0-.out: path .: in [jar:file:/opt//-1.13.0/lib/--impl-2.12.1.jar!/org//impl/.]: in [jar:file:/opt//-3.1.3////lib/--1.7.25.jar!/org//impl/.]: an .: is of type [org....](,1)(,2)(,1)(,3)(,1)

7.2 部署模式

在一些应用场景中,对于集群资源分配和占用的方式,可能会有特定的需求。为各种场景提供了不同的部署模式,主要有以下三种:

“会话模式( Mode)
单作业模式(Per-Job Mode)
应用模式( Mode)

它们的区别主要在于:集群的生命周期以及资源的分配方式;以及应用的main方法到底在哪里执行——客户端()还是。

7.2.1 会话模式( Mode)

会话模式其实最符合常规思维。我们需要先启动一个集群,保持一个会话,在这个会话中通过客户端提交作业。集群启动时所有资源就都已经确定,所以所有提交的作业会竞争集群中的资源。

会话模式比较适合于单个规模小、执行时间短的大量作业。

7.2.2 单作业模式(Per-Job Mode)

会话模式因为资源共享会导致很多问题,所以为了更好地隔离资源,我们可以考虑为每个提交的作业启动一个集群,这就是所谓的单作业(Per-Job)模式。

单作业模式也很好理解,就是严格的一对一,集群只为这个作业而生。同样由客户端运行应用程序,然后启动集群,作业被提交给,进而分发给执行。作业作业完成后,集群就会关闭,所有资源也会释放。

这些特性使得单作业模式在生产环境运行更加稳定,所以是实际应用的首选模式。

需要注意的是,本身无法直接这样运行,所以单作业模式一般需要借助一些资源管理框架来启动集群,比如YARN、。

7.2.3 应用模式( Mode)

前面提到的两种模式下,应用代码都是在客户端上执行,然后由客户端提交给的。但是这种方式客户端需要占用大量网络带宽,去下载依赖和把二进制数据发送给;加上很多情况下我们提交作业用的是同一个客户端,就会加重客户端所在节点的资源消耗。

所以解决办法就是,我们不要客户端了,直接把应用提交到上运行。而这也就代表着,我们需要为每一个提交的应用单独启动一个,也就是创建一个集群。这个只为执行这一个应用而存在,执行结束之后也就关闭了,这就是所谓的应用模式。

应用模式与单作业模式,都是提交作业之后才创建集群;单作业模式是通过客户端来提交的,客户端解析出的每一个作业对应一个集群;而应用模式下,是直接由执行应用程序的,并且即使应用包含了多个作业,也只创建一个集群。

这里我们所讲到的部署模式,相对是比较抽象的概念。实际应用时,一般需要和资源管理平台结合起来,选择特定的模式来分配资源、部署应用。接下来,我们就针对不同的资源提供者( )的场景,具体介绍的部署方式。

7.3 独立模式()

独立模式()是部署最基本也是最简单的方式:所需要的所有组件,都只是操作系统上运行的一个JVM进程。

独立模式是独立运行的,不依赖任何外部的资源管理平台;当然独立也是有代价的:如果资源不足,或者出现故障,没有自动扩展或重分配资源的保证,必须手动处理。所以独立模式一般只用在开发测试或作业非常少的场景下。

7.3.1 会话模式部署同样是使用bin目录下的脚本,启动。

$ ./bin/.sh

$ ./bin/-job.sh stop$ ./bin/.sh stop

7.4 YARN模式

YARN上部署的过程是:客户端把应用提交给Yarn的, Yarn的会向Yarn的申请容器。在这些容器上,会部署和的实例,从而启动集群。会根据运行在上的作业所需要的Slot数量动态分配资源。

7.4.1 相关准备和配置

在将任务部署至YARN集群之前,需要确认集群是否安装有,保证版本至少在2.2以上,并且集群中安装有HDFS服务。

具体配置步骤如下:

按照7.1节所述,下载并解压安装包,并将解压后的安装包重命名为-1.13.0-yarn,本节的相关操作都将默认在此安装路径下执行。配置环境变量,增加环境变量配置如下:

$ sudo vim /etc/.d/.sh=/opt//-2.7.5 PATH=$PATH:$/bin:$/sbin =${}/etc/ =` `

[@ ~]$ -dfs.sh[@ ~]$ -yarn.sh

解压安装包,并进入conf目录,修改-conf.yaml文件,修改配置。7.4.2 会话模式部署

YARN的会话模式与独立集群略有不同,需要首先申请一个YARN会话(YARN )来启动集群。具体步骤如下:

启动集群启动集群(HDFS, YARN)。执行脚本命令向YARN集群申请资源,开启一个YARN会话,启动集群。

$ bin/yarn-.sh -nm test

可用参数解读:

-d:分离模式,如果你不想让 YARN客户端一直前台运行,可以使用这个参数,即使关掉当前对话窗口,YARN 也可以后台运行。-jm(--):配置所需内存,默认单位MB。-nm(--name):配置在YARN UI界面上显示的任务名。-qu(--):指定YARN队列名。-tm(--):配置每个所使用内存。

注意.11.0版本不再使用-n参数和-s参数分别指定数量和slot数量,YARN会按照需求动态分配和slot。所以从这个意义上讲,YARN的会话模式也不会把集群资源固定,同样是动态分配的。

YARN 启动之后会给出一个web UI地址以及一个YARN ID,如下所示,用户可以通过web UI或者命令行两种方式提交作业。

2025-11-25 15:54:27,069 ...yarn.[] - YARN has been .2025-11-25 15:54:27,070 ...yarn.[] - Web of ''. Web : http://

提交作业“

这种方式比较简单,与上文所述部署模式基本相同。

”“将模式讲解中打包好的任务运行JAR包上传至集群
执行以下命令将该任务提交到已经开启的Yarn-中运行。。

$ bin/ run -c com.. -1.0-.jar

客户端可以自行确定的地址,也可以通过-m或者-参数指定的地址,的地址在YARN 的启动页面中可以找到。

任务提交成功后,可在YARN的Web UI界面查看运行情况。

$ ./bin/ list -t yarn-per-job -..id=$ ./bin/ -t yarn-per-job -..id=

这里的是当前应用的ID,是作业的ID。注意如果取消作业,整个集群也会停掉。

7.4.4 应用模式部署

应用模式同样非常简单,与单作业模式类似,直接执行 run-命令即可。

$ bin/ run- -t yarn- -c com.. -1.0-.jar

$ ./bin/ list -t yarn- -..id=$ ./bin/ list -t yarn- -..id=

也可以通过yarn..lib.dirs配置选项指定位置,将jar上传到远程。

$ ./bin/ run- -t yarn--..lib.dirs="hdfs:///my---dist-dir"hdfs:///jars/my-.jar

这种方式下jar可以预先上传到HDFS,而不需要单独发送到集群,这就使得作业提交更加轻量了。

7.5 K8S 模式

容器化部署是如今业界流行的一项技术,基于镜像运行能够让用户更加方便地对应用进行管理和运维。容器管理工具中最为流行的就是(k8s),而也在最近的版本中支持了k8s部署模式。基本原理与YARN是类似的,具体配置可以参见官网说明,这里我们就不做过多讲解了。