独立(Standalone)模式由Flink自身提供资源,无须其他框架,这种方式降低了和其他第三方资源框架的耦合性,独立性非常强。但我们知道,Flink是大数据计算框架,不是资源调度框架,这并不是它的强项;所以还是应该让专业的框架做专业的事,和其他资源调度框架集成更靠谱。在目前大数据生态中,国内应用最为广泛的资源管理平台就是YARN了。所以接下来我们就将学习在强大的YARN平台上,Flink是如何集成部署的。
整体来说,在YARN上部署的过程是:客户端将Flink应用提交给YARN的ResourceManager,YARN的ResourceManager会向YARN的NodeManager申请容器。在这些容器上,Flink会部署JobManager和TaskManager的实例,从而启动集群。Flink会根据运行在JobManger上的作业所需要的slots数量动态分配TaskManager资源。
在Flink 1.8.0之前的版本,想要以YARN模式部署Flink任务,需要Flink有Hadoop的环境支持。从Flink 1.8版本开始,不再提供基于Hadoop编译的安装包,若需要Hadoop的环境支持,需要自行在官网下载Hadoop相关版本的组件flink-shaded-hadoop-2-uber-2.7.5-10.0.jar,并将该组件上传至Flink的lib目录下。在Flink 1.11.0版本之后,增加了很多重要的新特性,其中就包括增加了对Hadoop 3.0.0及更高版本Hadoop的支持,不再提供“flink-shaded-hadoop-*”jar包,而是通过配置环境变量完成与YARN集群的对接。
在Flink任务部署至YARN集群之前,需要确认集群是否安装有Hadoop,保证Hadoop版本至少在2.2以上,并且集群中安装有HDFS服务。
具体配置步骤如下所示。
(1)按照3.1节所述,下载并解压安装包,并将解压后的安装包重命名为flink-1.13.0-yarn,本节的相关操作都将默认在此安装路径下执行。
(2)配置环境变量,增加环境变量配置如下:
(3)启动Hadoop集群,包括HDFS和YARN。
分别在3台节点服务器查看进程启动情况。
(4)进入conf目录,修改flink-conf.yaml文件,修改以下配置,这些配置项的含义在进行Standalone模式配置的时候进行过讲解,若在提交命令中不特定指明,这些配置将作为默认配置。
YARN的会话模式与独立集群略有不同,需要首先申请一个YARN会话(YARN session)来启动Flink集群,具体步骤如下所示。
1.启动集群
(1)启动Hadoop集群,包括HDFS和YARN。
(2)执行脚本命令向YARN集群申请资源,开启一个YARN会话,启动Flink集群。
可用参数解读如下所示。
· -d:分离模式,如果你不想让Flink YARN客户端一直在前台运行,可以使用这个参数,即使关掉当前对话窗口,YARN session也可以在后台运行。
· -jm(--jobManagerMemory):配置JobManager所需内存,默认单位为MB。
· -nm(--name):配置在YARN UI界面上显示的任务名。
· -qu(--queue):指定YARN队列名。
· -tm(--taskManager):配置每个TaskManager所用内存。
注意:Flink1.11.0版本不再使用-n参数和-s参数分别指定TaskManager数量和slot数量,YARN会按照需求动态分配TaskManager和slot。从这个意义上讲,YARN的会话模式也不会把集群资源固定,同样是动态分配的。
YARN Session启动之后会给出一个Web UI地址及一个YARN application ID,如下所示,用户可以通过Web UI或命令行两种方式提交作业。
2.提交作业
(1)通过Web UI提交作业。
这种方式比较简单,与上文所述Standalone部署模式基本相同。
(2)通过命令行提交作业。
① 将Standalone模式讲解中打包好的任务运行jar包上传至集群。
② 执行以下命令,将该任务提交到已经开启的YARN Session中运行。
客户端可以自行确定JobManager的地址,也可以通过-m或-jobmanager参数指定JobManager的地址,JobManager的地址在YARN Session的启动页面中可以找到。
③ 任务提交成功后,可在YARN的Web UI界面查看运行情况。
如图3-14所示,从图中可以看到我们创建的YARN Session实际上是一个YARN的Application,并且有唯一的Application ID。
图3-14 YARN的Web UI界面
④ 也可以通过Flink的Web UI页面查看提交任务的运行情况,如图3-15所示。
图3-15 Flink的Web UI页面
在YARN环境中,因为有了外部平台作资源调度,所以我们也可以直接向YARN提交一个单独的作业,从而启动一个Flink集群。
(1)执行命令提交作业。
早期版本也有另一种写法如下:
注意:这里是通过参数-m yarn-cluster指定向YARN集群提交任务的。
(2)在YARN的ResourceManager界面查看执行情况,如图3-16所示。
图3-16 YARN的ResourceManager界面
在任务提交成功后,控制台打印的日志会提供Flink Web UI页面地址,我们可以打开Flink Web UI页面进行监控,如图3-17所示。
图3-17 Flink Web UI页面
(3)可以使用命令行查看或取消作业,命令如下:
这里的application_XXXX_YY是当前应用的ID,<jobId>是作业的ID。注意:如果取消作业,整个Flink集群也会停掉。
应用模式部署同样非常简单,与单作业模式类似,直接执行flink run-application命令即可。
(1)执行命令提交作业。
(2)在命令行中查看或取消作业。
(3)也可以通过yarn.provided.lib.dirs配置选项指定位置,将jar上传到远程。
这种方式下jar可以预先上传到HDFS,而不需要单独发送到集群,这就使得作业提交更加轻量了。
YARN模式的高可用和独立模式的高可用原理不一样。
在Standalone模式中,同时启动多个JobManager,一个为“领导者”(leader),其他为“后备”(standby),当leader宕机,其他的JobManager才会有一个成为leader。
而YARN的高可用是只启动一个JobManager,当这个JobManager挂了之后,YARN会再次启动一个,所以其实是利用了YARN的重试次数来实现的高可用。
(1)在yarn-site.xml中配置高可用。
注意:配置完不要忘记分发和重启YARN。
(2)在flink-conf.yaml中配置高可用。
(3)启动yarn-session。
(4)“杀死”JobManager,查看复活情况。
注意:yarn-site.xml中配置的是JobManager重启次数的上限,flink-conf.xml中的次数应该小于这个值。