【Flink】部署模式-会话模式/单作业模式/应用模式/Yarn模式/独立模式/K8s模式

目录

  • 部署模式
    • 会话模式(Session Mode)
    • 单作业模式(Per-Job Mode)
    • 应用模式(Application Mode)
  • 结合资源提供者(Resource Provider)下的部署模式
    • 独立模式(Standalone)
      • 会话模式部署
      • 单作业模式部署
      • 应用模式部署
    • YARN模式
      • 相关准备和配置
      • 会话模式/应用模式/单作业模式
    • Native Kubernetes

部署模式

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

  • 会话模式(Session Mode)
  • 单作业模式(Per-Job Mode)
  • 应用模式(Application Mode)

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

会话模式(Session Mode)

会话模式其实最符合常规思维。我们需要先启动一个集群,保持一个会话,在这个会话中通过客户端提交作业,如下图所示,集群启动时所有的资源就都已经确定,所以所有提交的作业会竞争集群中的资源。
【Flink】部署模式-会话模式/单作业模式/应用模式/Yarn模式/独立模式/K8s模式_第1张图片
会话模式比较适合单个规模小、执行时间短的大量作业。

单作业模式(Per-Job Mode)

会话模式会因为共享资源导致很多问题,所以为了更好的隔离资源,我们可以考虑为每一个作业单独启动一个集群,这就是所谓的单作业模式,如下图:
【Flink】部署模式-会话模式/单作业模式/应用模式/Yarn模式/独立模式/K8s模式_第2张图片
单作业模式也很好理解,就是严格的一对一,集群只为这个作业而生。同样地由客户端运行应用程序,然后启动集群,作业被提交给JobManager,继而分发给TaskManager执行。作业完成后,集群就会关闭,释放所占用的资源。

这些特性使得单作业模式在生产环境运行的更加稳定,所以是实际应用的首选模式。
需要注意的是,Flink本身无法直接这样运行,所以单作业模式一般会借助一些资源管理框架来启动集群,比如YARN、Kubernetes

应用模式(Application Mode)

前面提到的两种部署模式下,应用代码都是在客户端执行,然后由客户端提交个jobManager。但是这种方式客户端需要占用大量的网络带宽,去下载依赖和把二进制文件分发给JobManager。加上很多情况下我们提交作业都是用的同一个client,就会加重客户端所在节点的资源消耗。
所以解决办法就是,我们不要客户端了,直接把作业提交给JobManager执行。而这也就代表着,我们需要为每一个作业单独启动一个JobManager,也就是创建一个集群。这个JobManager只为了执行这一个应用而存在,执行结束后JobManager也就关闭了,这就是所谓的应用模式,如下图所示:
【Flink】部署模式-会话模式/单作业模式/应用模式/Yarn模式/独立模式/K8s模式_第3张图片
应用模式和单作业模式,都是提交作业后再创建一个集群;单作业是通过客户端来提交的,客户端解析出的每一个作业对应一个集群;而应用模式下,是直接由JobManager执行应用程序的,并且即使应用包含了多个作业,也只创建一个集群。

这里我们所讲的部署模式,相对来说是比较抽象的概念。实际应用时,一般需要和资源管理平台结合起来,选择特定的模式来分配资源,部署应用。

结合资源提供者(Resource Provider)下的部署模式

独立模式(Standalone)

独立模式是部署Flink最基础最简单的方式,所需的所有Flink组件都只是操作系统上运行的一个JVM进程。
独立模式是独立运行的,不依赖任何的资源管理平台;当然独立也是有代价的,如果资源不足,或者出现故障,没有自动拓展和重分配资源的保证,必须手动处理。
所以独立模式一般是只用于开发测试或作业非常少的场景

会话模式部署

不配置资源管理平台,通过start-cluster.sh启动时启动的就是会话模式。这时可以在集群上提交多个作业,但是资源是固定的,无法拓展和重分配,只有当运行的作业停止后才会释放出资源。

单作业模式部署

Flink本身无法直接以单作业方式启动集群,一般需要借助一些资源管理平台。所以Flink的独立集群并不支持单作业模式部署。

应用模式部署

应由模式下不会提前创建集群,所以不能调用start-cluster.sh脚本。我们可以使用同样在bin目录下的standalone-job.sh来创建一个JobManager。
具体步骤如下:

  1. 进入Flink的安装路径,将应用程序的jar包放到lib目录下。
  2. 执行以下命令,启动JobManager
    ./bin/standalone-jog.sh start --job-classname com.xx.xx.xx.StreamingWordCount
    
    这里直接指定作业的入口类,脚本会自动扫描lib目录下的所有jar包。
  3. 同样使用bin目录下的脚本,启动TaskManager。
    ./bin/taskmanager.sh start
    
  4. 如果希望停掉集群,同样可以使用脚本,命令如下:
    ./bin/standalone-job.sh stop
    ./bin/taskmanager.sh stop
    

YARN模式

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

相关准备和配置

在将Flink任务部署到YARN集群之前,需要确认集群是否安装有Hadoop,保证Hadoop版本至少在2.2以上,并且集群中安装有HDFS。
具体配置步骤如下:

  1. 下载Flink安装包并解压,给安装包重命名。
  2. 配置环境变量,增加环境变量配置如下:
    用户环境变量设置参考
    sudo vim /etc/profile.d/my_env.sh
    HADOOP_HOME=/opt/module/hadoop-2.7.5
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    #这里实际是执行hadoop classpath命令获取路径并返回
    export HADOOP_CLASSPATH=`hadoop classpath`
    
  3. 启动Hadoop集群,包括HDFS和YARN。
    start-dfs.sh
    start-yarn.sh
    

会话模式/应用模式/单作业模式

参考官网详细描述:https://nightlies.apache.org/flink/flink-docs-release-1.16/zh/docs/deployment/resource-providers/yarn/

Native Kubernetes

参考官网详细描述:https://nightlies.apache.org/flink/flink-docs-release-1.16/zh/docs/deployment/resource-providers/yarn/

你可能感兴趣的:(Flink,kubernetes,flink,容器,yarn,大数据)