14. Flink 程序分布式部署运行

14. Flink 程序分布式部署运行

14.1 Job执行流程

四层说明备注
StreamGraph代码生成的最初的图表示程序的拓扑结构
JobGraph将多个符合条件的节点,链接为一个节点可减少数据在节点之间流动所需要的序列化传输消耗
ExecutionGraphJobGraph的并行化版本是调度层最核心的数据结构
PhysicalGraphJobManager根据ExecutionGraph对Job进行调度后,在各个TaskManager上部署Task后形成的“图”并不是一个具体的数据结构
Flink图45 Flink图46

14.2 Flink集群运行时架构

Flink图47

Flink图48

Flink程序中如果要访问到hdfs,则需要添加2个jar包到Flink的lib目录中
flink-shaded-hadoop-3-uber-3.1.1.7.2.9.0-173-9.0.jar
commons-cli-1.4.jar

standalone集群模式的缺点:

  • 资源利用弹性不够(资源总量是定死的,job退出后也不能立即回收资源)
  • 资源隔离度不够(所有job共享集群的资源)
  • 所有job共用一个jobManager,负载过大
yarn模式运行时示意图
Flink图49

flink on yarn,本质上就是去yarn集群上申请容器,来运行flink的jobManager + taskManager集群
flink的job,是flink集群内部的概念,它对yarn是不可见的

Flink can execution applications in one of three ways:

  • in Application Mode
    每个job独享一个集群,job退出则集群退出,用户类的main方法在集群上运行;

  • in a Per-Job Mode
    每个job独享一个集群,job退出则集群退出,用户类的main方法在client端运行;
    (大job,运行时长很长,比较合适,因为每起一个job,都要去向yarn申请容器启动jobManager,taskManager,比较耗时)

  • in Session Mode
    多个job共享同一个集群,job退出集群也不会退出,用户类的main方法在client端运行;

    (需要频繁提交大量小job的场景比较适用,因为每次提交一个新job的时候,不需要去向yarn注册应用)

The above modes differ in :

  • the cluster lifecycle and resource isolation guarantees
  • whether the application’s main() method is executed on the client or on the cluster
Flink图50

14.6 yarn session模式提交

Yarn-Session模式:所有作业共享集群资源,隔离性差,JM负载瓶颈,main方法在客户端执行,适合执行时间短,频繁执行的短任务,集群中的所有作业只有一个jobManager,另外,job被随机分配给TaskManager

特点:
Session-Cluster模式需要先启动集群,然后再提交作业,接着会向yarn申请一块空间后,资源永远保持不变,如果资源满了,下一个作业就无法提交,只能等到yarn中的一个作业执行完成后,释放了资源,下个作业才会正常提交。所有作业共享Dispatcher和ResourceManager;共享资源,适合规模小执行时间短的作业。

基本操作命令

提交命令:bin/yarn-session.sh -help
停止命令:yarn application -kill application_1550951854_002

1
2
3
4
5
6
7
8
9
10
11
12
13
bin/yarn-session.sh -jm 1024 -tm 1024 -s 2 -m yarn-cluster -nm hello -qu default

# -jm --> jobManager memory

# -tm --> taskManager memory

# -m yarn-cluster --> 集群模式(yarn集群模式)

# -s --> 规定每个taskManager上的tasksolt数

# -nm --> 自定义application名称

# -qu --> 指定要提交的yarn队列