独立模式(Standalone)是部署Flink最基本也是最简单的方式:所需要的所有Flink组件,都只是操作系统上运行的一个JVM进程。
独立模式是独立运行的,不依赖任何外部资源管理平台;当然独立也是有代价的,如果资源不足,或者出现故障,没有自动扩展或重分配资源的保证,必须手动处理。所以独立模式一般只用在开发测试或作业非常少的场景下。
另外,我们也可以将独立模式的集群放在容器中运行。Flink提供了独立模式的容器化部署方式,可以在Docker或Kubernetes(简称K8s)上进行部署。
可以发现,独立模式的特点是不依赖外部资源管理平台,而会话模式的特点是先启动集群、后提交作业。所以,我们在3.1节用的就是独立模式的会话模式部署。
在3.2.2节中我们提到,Flink本身无法直接以单作业方式启动集群,一般需要借助资源管理平台。所以Flink的独立(Standalone)集群并不支持单作业模式部署。
在应用模式下不会提前创建集群,所以不能调用start-cluster.sh脚本。我们可以使用同样在bin目录下的standalone-job.sh来创建一个JobManager。
具体步骤如下所示。
(1)进入Flink的安装路径下,将应用程序的jar包放到lib/目录下。
(2)执行以下命令,启动JobManager。
这里我们直接指定作业入口类,脚本会到lib目录扫描所有的jar包。
(3)同样是使用bin目录下的脚本,启动TaskManager。
(4)如果希望停掉集群,同样可以使用脚本,命令如下。
分布式除了提供高吞吐,另一大好处就是有更好的容错性。对Flink而言,一般会有多个TaskManager,即使运行时出现故障,也不需要将全部节点重启,只要尝试重启故障节点就可以了。但是我们发现,对一个作业而言,管理它的JobManager却只有一个,这同样有可能出现单点故障。为了实现更好的可用性,我们需要JobManager做一些主备冗余,这就是所谓的高可用(High Availability,HA)。
我们可以通过配置,让集群在任何时候都有一个主JobManager和多个备用JobManager,如图3-13所示,这样主节点故障时就由备用节点来接管集群,接管后作业就可以继续正常运行。主备JobManager实例之间没有明显的区别,每个JobManager都可以充当主节点或备节点。
图3-13 一个主JobManager和多个备用JobManager
具体配置如下所示。
(1)进入Flink安装路径的conf目录下,修改配置文件:flink-conf.yaml,增加如下配置。
(2)修改配置文件:masters,配置备用JobManager列表。
(3)分发修改后的配置文件到其他节点服务器。
(4)在/etc/profile.d/my_env.sh中配置环境变量。
注意:
· 需要提前保证HAOOP_HOME环境变量配置成功。
· 分发到其他节点。
具体部署方法如下所示。
(1)启动HDFS集群和Zookeeper集群。
(2)执行以下命令,启动standalone HA集群。
(3)可以分别访问两个备用JobManager的Web UI页面。
(4)在zkCli.sh中查看谁是领导者(leader)。
“杀死”hadoop102上的JobManager进程,再次查看谁是领导者。
注意:不管是不是领导者,从Web UI上是看不到区别的,都可以提交应用。