【Flink on YARN 部署(上)】Flink on YARN 理论概念

文章目录

    • 前言
    • Flink on YARN
      • YARN中一些重要的概念
        • ResourceManager
        • NodeManager
        • ApplicationMaster
        • Container
      • Flink 在 YARN上的分布及提交流程
        • Flink 在 YARN 上的分布
        • 提交流程

前言

将Flink 提交在 YARN 上是企业的一种常用做法,这样做的目的是为了提高集群的利用率。

Flink on YARN 有2种部署方式

  • 【yarn-session.sh开辟资源+ flink run】(这样的话,Flink cluster 会常驻)

  • 【flink run -m yarn-cluster(开辟资源+提交任务】 (每次提交,都会创建一个新的Flink 集群,任务之间相互独立)

    【Flink on YARN 部署(上)】Flink on YARN 理论概念_第1张图片

此文旨在阐述,Flink 提交 YARN 的过程。

Flink on YARN

YARN中一些重要的概念

ResourceManager

  • 每个集群只会有一个ResourceManager(如果是HA的话会存在两个,但是有且只有一个处于active状态),它负责管理整个集群的计算资源,并将这些资源分别给应用程序。ResourceManager 内部主要有两个组件:
    • Scheduler:这个组件完全是插拔式的,用户可以根据自己的需求实现不同的调度器,目前YARN提供了FIFO、容量以及公平调度器。这个组件的唯一功能就是给提交到集群的应用程序分配资源,并且对可用的资源和运行的队列进行限制。Scheduler并不对作业进行监控;
    • ApplicationsManager (AsM):这个组件用于管理整个集群应用程序的application masters,负责接收应用程序的提交;为application master启动提供资源;监控应用程序的运行进度以及在应用程序出现故障时重启它。

NodeManager

  • NodeManager是YARN中每个节点上的代理,它管理Hadoop集群中单个计算节点,根据相关的设置来启动容器的。NodeManager会定期向ResourceManager发送心跳信息来更新其健康状态。同时其也会监督Container的生命周期管理,监控每个Container的资源使用(内存、CPU等)情况,追踪节点健康状况,管理日志和不同应用程序用到的附属服务(auxiliary service)。

ApplicationMaster

  • ApplicationMaster是应用程序级别的,每个ApplicationMaster管理运行在YARN上的应用程序。YARN 将 ApplicationMaster看做是第三方组件,ApplicationMaster负责和ResourceManager scheduler协商资源,并且和NodeManager通信来运行相应的task。ResourceManager 为 ApplicationMaster 分配容器,这些容器将会用来运行task。ApplicationMaster 也会追踪应用程序的状态,监控容器的运行进度。当容器运行完成, ApplicationMaster 将会向 ResourceManager 注销这个容器;如果是整个作业运行完成,其也会向 ResourceManager 注销自己,这样这些资源就可以分配给其他的应用程序使用了。

Container

  • Container是与特定节点绑定的,其包含了内存、CPU磁盘等逻辑资源。不过在现在的容器实现中,这些资源只包括了内存和CPU。容器是由 ResourceManager scheduler 服务动态分配的资源构成。容器授予 ApplicationMaster 使用特定主机的特定数量资源的权限。ApplicationMaster 也是在容器中运行的,其在应用程序分配的第一个容器中运行。

【Flink on YARN 部署(上)】Flink on YARN 理论概念_第2张图片

Flink 在 YARN上的分布及提交流程

Flink 在 YARN 上的分布

  • ResourceManager
  • NodeManager
  • AppMaster(JobManager 和 AppMaster 运行在一个Container中)
  • Container(taskManager 运行在 上面)

提交流程

【Flink on YARN 部署(上)】Flink on YARN 理论概念_第3张图片

  1. 启动一个Flink YARN session 前,clilent首先会检查启动ApplicationMaster 所需的内存和资源是充足,然后上传包含Flink 的jar 和配置 至 HDFS

  2. client 向ResourceManager 请求一个YARN container 用来启动ApplicationMaster(这时AppMaster还未启动)

  3. 注册AppMasterContainer细节:client将 jar-file 和 configuration 当作资源,注册给容器,RM通知其中的1个NM负责准备容器(下载文件等),完成后,启动AM(ApplicationMaster)

    JobManager 和 AM 运行在相同的容器里,当它们成功启动,它会把JobManager的地址重新作为一个文件上传到HDFS上去,TaskManager在启动的过程中也会去下载这个文件获取JobManager的地址,然后与其进行通信;AM还负责Flink的web 服务,Flink里面用到的都是随机端口,这样就允许了用户能够启动多个yarn session。

  4. AM 分配 TaskManager 的 container,这个container将从HDFS下载 配置 和 jar-file,当这些步骤完成后,Flink 被启动,就可以接收任务了.

Flink on YARN 分为2个部分:

  • 准备工人和工具(初始化ENV的过程)
  • 给工人分配具体的操作(action 什么时候触发)

参考:

  1. https://www.roncoo.com/view/1078864388014301185
  2. https://www.jianshu.com/p/20d5c3ad5843

你可能感兴趣的:(Flink)