Flink架构

Flinks所需组件

JobManager

  1. 接受需要执行的应用,此应用包含一个JobGraph(逻辑Dataflow图),以及打包了全部所需类、库以及其他资源的JAR文件。JobManager将JobGraph转化为ExecutionGraph(物理Dataflow图),此图包含了那些可以并行的任务。
  2. JobManager向ResourceManager申请执行任务所需资源(TaskManager的slot槽)。
  3. 将ExecutionGraph中的任务分发给TaskManager来执行。
  4. 负责所有需要集中协调的操作,如创建检查点等。

ResourceManager

  1. 分配TaskManager给JobManager。
  2. 负责终止空闲的TaskManager以释放资源。

TaskManager

  1. 向ResourceManager注册它的slot槽。
  2. 接受ResourceManager的指示,向JobManager提供一个或多个槽。
  3. 接受并执行JobManager提供的任务。

Dispatcher

  1. 提供一个REST接口来让我们提交需要执行的应用。
  2. 转交提交的应用给JobManager。
  3. 启动WebUI,用来提供有关作业执行的信息。

Flink任务提交流程

  • 通用提交流程(ResourceManager未指定)Flink架构_第1张图片
  • 运行在yarn上的提交流程Flink架构_第2张图片

应用提交

参考文章。1
Flink 应用的执行包含两个阶段:

  • pre-flight: 在main()方法调用之后开始。
  • runtime: 一旦用户代码调用 execute() 就会触发该阶段。

main()方法使用Flink的API(DataStream API,Table API,DataSet API)之一构造用户程序。当main()方法调用env.execute()时,用户定义的pipeline将转换为Flink运行时可以理解的形式,称为job graph,并将其传送到集群中。

尽管有一些不同,但是 对于 Session 模式 和 Per-Job模式 , pre-flight 阶段都是在客户端完成的。

对于那些在自己本地计算机上提交任务的场景(本地计算机包含了所有运行Job所需的依赖),这通常不是问题。但是,对于通过诸如部署服务之类的远程进行提交的场景,此过程包括:

  • 下载应用所需的依赖
  • 执行main()方法提取 job graph
  • 将依赖和 job graph 传输到集群
  • 有可能需要等待结果

Flink任务提交方式

  • standalone
  • yarn
    1)application模式(1.11版本之后)
    特点:一个集群运行一个作业,但是main()方法是在JobManager中运行。
    2)session模式
    特点:一个集群运行多个作业,适合短期作业。
    优点:启动的延迟小。
    缺点:JobManager或TaskManager挂掉后,影响多个job。不同job之间有资源竞争。
    ①开辟资源
    命令:./yarn-session.sh -n 2 -jm 1024 -tm 1024 -d
    -n 2 表示分配两个container容器,也就是taskmanager的数量
    -jm 1024 表示jobmanager 1024M内存
    -tm 1024 表示taskmanager 1024M内存
    -d 任务后台运行
    ②提交任务
    ./flink run jar包路径/jar包名.jar
    3)job模式
    特点:一个集群运行一个作业,作业执行完毕则集群销毁,适合长期作业。
    优点:不同job之间资源相互隔离。
    缺点:启动的延迟大。
    命令:./flink run -m yarn-cluster -yn 2 -yjm 1024 -ytm 1024 jar包路径/jar包名.jar
    -m yarn-cluster 指定需要连接的jobmanager(主节点)地址
    -yn 2 表示分配两个container容器,也就是taskmanager的数量
    -yjm 1024 表示jobmanager 1024M内存
    -ytm 1024 表示taskmanager 1024M内存

  1. 链接: https://blog.csdn.net/CarloPan/article/details/117740819. ↩︎

你可能感兴趣的:(Flink,flink,架构,大数据)