Flink从入门到精通02之集群部署

1. Cluster mode introduction

1.1. Comparison of cluster deployment modes

根据以下两种条件将集群部署模式分为三种类型:

  1. 集群的生命周期和资源隔离
  2. 根据程序main()方法执行在client还是job manager

modes:

  • Session Mode: 共享job manager和task manager, 所有提交的job都在一个Runtime中运行
  • Per-job Mode: 独享job manager和task manager, 好比为每个job单独启动一个Runtime
  • Application Mode: Application的main()运行在Cluster上,不是在client端; 每个application对应一个runtime, Application中可以有多个job

1.2. Session cluster mode

Flink从入门到精通02之集群部署_第1张图片

1.2.1. Session mode

  • Job manager与Task manager共享
  • 客户端通过RPC或者Rest API连接集群的管理节点
  • Deployer需要上传依赖的dependency jar
  • Deployer需要生产job graph, 并提交到管理节点
  • Job manager的生命周期不受提交的job的影响,会长期运行

1.2.2. Session mode pros

  • 资源充分共享,提升资源利用率
  • Job在Flink Session集群中管理,运维简单

1.2.3. Session mode cons

  • 资源隔离相对较差
  • 非native类型部署,Task Manager不易拓展, Slot计算资源伸缩性较差

1.3. Per-Job mode

Flink从入门到精通02之集群部署_第2张图片

1.3.1. Per-job mode

  • 单个job独享Job manager与Task manager
  • Task manager中slot资源根据job指定
  • Deployer需要上传依赖的dependencys jar
  • 客户端生成job graph, 并提交到管理节点
  • Job manager的生命周期和job生命周期绑定

1.3.2. Per-job mode pros

  • Job和job之前资源隔离充分
  • 资源根据job需要进行申请,TM Slots数量可以不同

1.3.3. Per-job mode cons

  • 资源相对比较浪费, Job manager需要消耗资源
  • Job管理完全交给Cluster Management, 管理复杂

1.4. Application mode

Flink从入门到精通02之集群部署_第3张图片

1.4.1. Application mode

  • 每个Applcation对应一个JobManager, 且可以运行多个job
  • client无需讲dependencies 上传到Job Manager, 仅负责管理Job的提交与管理
  • main()方法运行在Job Manager中, 将Job graph的生产放在集群上运行,客户端压力降低

1.4.2. Application mode pros

  • 有效降低宽带消耗和客户端负载
  • Application实现资源隔离,Application中实现资源共享

1.4.3. Application mode cons

  • 仅支持Yarn和kubunetes

2. Cluster Deploy

Cluster management support:

Standalone
Hadoop Yarn
Apache Mesos
Docker
Kubernetes

Comparison
Flink从入门到精通02之集群部署_第4张图片

2.1. Native Cluster Deploy

Flink从入门到精通02之集群部署_第5张图片

  • 当在cluster management上启动session集群时,只启动job manager实例,不启动task manager
  • 提交job-1后根据job的资源申请,动态启动task manager满足计算需求
  • 提交job-2,job-3后,再次想cluster management中申请task manager资源

支持native部署模式的Yarn,Kubernetes,Mesos资源管理器
Standalone不支持Native部署

2.2. Standalone

Flink从入门到精通02之集群部署_第6张图片

集群特点:

  • 分布式多台物理机部署
  • 仅支持Session模式提交job
  • 支持高可用配置

2.2.1. Standalone(single)cluster deploy

Flink从入门到精通02之集群部署_第7张图片

  • Job Manager和Task Manager全部在一个机器上运行
  • 仅适合于本地测试,不适用于生产环境
  • 仅支持session 模式提交job
  • 不支持高可用

Deploy details:

  1. download the Flink package from the official website: https://flink.apache.org/downloads.html
  2. unfold the package: tar xvf flink 1.11.1-bin-scala_2.11.tgz
  3. launch the Flink cluster: cd flink-1.11.1 & ./bin/start-cluster.sh
  4. visit the localhost:8081 to check
    Flink从入门到精通02之集群部署_第8张图片

run the Flink demo

sg99064ml@SG99064MLs-MBP bin % ./start-cluster.sh 
Starting cluster.
Starting standalonesession daemon on host SG99064MLs-MBP.
Starting taskexecutor daemon on host SG99064MLs-MBP.
sg99064ml@SG99064MLs-MBP bin % cd ..
sg99064ml@SG99064MLs-MBP flink-1.13.2 % ./bin/flink run examples/streaming/WordCount.jar
Executing WordCount example with default input data set.
Use --input to specify file input.
Printing result to stdout. Use --output to specify output path.
Job has been submitted with JobID 3ea67e8ecdc558c2822cc7dce292c569
Program execution finished
Job with JobID 3ea67e8ecdc558c2822cc7dce292c569 has finished.
Job Runtime: 768 ms

sg99064ml@SG99064MLs-MBP flink-1.13.2 % tail log/flink-*-taskexecutor-*.out
(nymph,1)
(in,3)
(thy,1)
(orisons,1)
(be,4)
(all,2)
(my,1)
(sins,1)
(remember,1)
(d,4)

2.2.2. Standalone(multiple)cluster deploy

Flink从入门到精通02之集群部署_第9张图片

准备条件:

  • 安装JDK病配置JAVA_HOME路径和环境变量 on all nodes
  • 配置HADDOP_CONFIG_DIR环境变量,如果需要使用HDFS
  • 每天节点Flink package路径保持一致, 且版本一致
  • node01几点和其他4个节点ssh打通
  • 部署节点
  • Node01作为master节点仅部署Job manager
  • Node02-Node05作为worker节点部署Task Manager

修改配置:

  • 修改conf/flink-conf.yaml文件, 配置jobmanager.rpc.address:localhost
  • 修改conf/master文件, 设置master节点为Node1
  • 修改conf/workder文件, 设置worker节点地址
  • 将修改后的配置文件同步到每个节点的${FLINK_HOME}/conf路径下

2.3. Flink On Yarn

2.3.1. Yarn Cluster Architecture

Flink从入门到精通02之集群部署_第10张图片

2.3.1.1. Resource Manager(RM)

  • 负责处理client请求
  • 监控Node Manager
  • 启动和监控Application Master
  • 资源的分配和调度

2.3.1.2. Node Manager(NM)

  • 管理单个Worker节点上的资源
  • 处理来自Resource Manager的命令
  • 处理来自Application Mster的命令
  • 汇报资源状态

2.3.1.3. Application Master

  • 负责数据的切分
  • 为应用申请计算资源并分配给task
  • 任务的监控与容错
  • 运行在worker节点上

2.3.1.4. Container

  • 资源抽象,封装了节点上的多维度资源,如cpu, mem, net, IO等

2.3.2. Flink On Yarn Cluster Deploy - Session mode

Flink从入门到精通02之集群部署_第11张图片

  • 多Job manager共享Dispatcher和YarnResourceManager
  • 支持Native模式,TM动态申请

2.3.3. Flink On Yarn Cluster Deploy - Per-job mode

Flink从入门到精通02之集群部署_第12张图片

  • 单个Job Manager独享YarnResourceManager和Dispatcher
  • Application Master与Flink Master节点处于同一个Container

2.3.3. Flink On Yarn Cluster Deploy - pros and cons

pros:

  • 与现有的大数据平台无缝对接
  • 部署集群与任务提交都非常简单
  • 资源管理统一通过yarn管理, 提升整体资源利用率
  • 基于Native方式, Task Manager资源按需申请和启动, 防止资源浪费
  • 容错保证借助与Hadoop Yarn提供的自动failover机制, 能保证Job Manager, Task Manager节点异常恢复

cons:

  • 资源隔离问题, 尤其是网络资源的隔离, Yarn做得还不够完善
  • 离线和实时作业同事运行相互干扰等问题
  • kerberos认证超期问题导致checkpoint无法持久化

2.3.3. Flink On Yarn Cluster Deploy steps

  • 下载Flink安装包, 并解压到单台节点指定路径
  • Hadoop安装 :Hadoop Yarn版本需要在2.4.1以上, 且具有HDFS
  • 节点配置HADOOP_CONF_DIR环境变量, 并指向Hadoop客户端配置路径
  • Session 集群启动: ./bin/yarn-session.sh -jm 1024m -tm 4096m
  • Job 集群启动: ./bin/flink run -m yarn-cluster -p 4 -yjm 1024 -ytm4096 ./examples/batch/WordCount.jar
  • Application 集群启动: ./bin/flink run-application -t yarn-application -Djobmanager.memory.process.size=2048m – Dtaskmanager.memory.process.size=4096m -Dyarn.provided.lib.dirs=“hdfs://your-address/flink-learn/flink-1.3/MyApplication.jar”

2.4. Flink on Kubernetes

2.4.1. Kubernetes Cluster Architecture

Flink从入门到精通02之集群部署_第13张图片

k8s的可以参考blog:https://blog.csdn.net/weixin_46036165/category_10037886.html

2.4.1.1. Master

  • 负责整个集群的管理, 资源管理
  • 运行APIServer, ControllerManager, Scheduler服务
  • 提供etcd高可用键值存储服务, 用来保存kubernetes集群所有对象的状态信息和网络信息

2.4.1.2. Node

  • 集群操作的单元, pod运行宿主机
  • 运行业务负载, 业务负载会以pod的形式运行

2.4.1.3. Kubelet

  • 运行在node节点上, 维护和管理该node上的容器

2.4.1.4. Container Runtime

  • Docker容器运行环境, 负责容器的创建和管理

2.4.1.5. Pod

  • 运行在node节点上, 多个相关的container的组合
  • kubernetes创建和管理的最小单元

2.4.2. Flink On Kubernetes Deploy

todo

2.5. Flink Cluster HA

Flink从入门到精通02之集群部署_第14张图片

2.5.1. Job Persist

Flink从入门到精通02之集群部署_第15张图片
Flink从入门到精通02之集群部署_第16张图片
Flink从入门到精通02之集群部署_第17张图片

Flink从入门到精通02之集群部署_第18张图片

2.5.2. Handling Checkpoints

Flink从入门到精通02之集群部署_第19张图片
Flink从入门到精通02之集群部署_第20张图片

Flink从入门到精通02之集群部署_第21张图片

Flink从入门到精通02之集群部署_第22张图片

Flink从入门到精通02之集群部署_第23张图片

你可能感兴趣的:(大数据,flink,数据库,flink集群,flink学习,flink理解)