standalone模式
缺点
- 资源利用弹性不够(资源总量是定死的;job 退出后也不能立刻回收资源)。
- 资源隔离度不够(所有 job 共享集群的资源)。
- 所有 job 共用一个 jobmanager,负载过大。
配置方式
# 1.conf/master 配置 JobManager 地址
hadoop102:8081
# 2.conf/workers 配置 TaskManager 机器地址
hadoop102
hadoop103
hadoop104
# 3.conf/flink-conf.yaml 程序参数配置
jobmanager.rpc.address: hadoop102 // master地址
taskmanager.numberOfTaskSlots: 2 // 槽位数
# 4.集群分发flink目录
# 5.启动/停止集群
bin/start-cluster.sh
bin/stop-cluster.sh
# web-ui(默认端口8081)
hadoop102:8081
# 命令行模式提交作业
-m:指定了提交到的JobManager
-c:指定了入口类
bin/flink run -m hadoop102:8081 -c com.atguigu.wc.SocketStreamWordCount ./FlinkTutorial-1.0-SNAPSHOT.jar
# 触发 standalone 模式 job 做 savepoint
# -d : detach 模式,客户端提交完 job 即退出
# -t remote : 表示 job 是 standalone 运行模式
bin/flink savepoint -t remote 5f1bc357bfd1e686e34b6cfce6d0cda9 hdfs://doit01:8020/eos_savepoint1
FlinkOnYarn模式
- flink on yarn,本质上就是去 yarn 集群上申请容器,来运行 flink 的 jobmanager+taskmanager 集群。
- flink 的 job,是 flink 集群内部的概念,它对 yarn 是不可见的。
YARN上部署的过程是:客户端把Flink应用提交给Yarn的ResourceManager,Yarn的ResourceManager会向Yarn的NodeManager申请容器。在这些容器上,Flink会部署JobManager和TaskManager的实例,从而启动集群。Flink会根据运行在JobManger上的作业所需要的Slot数量动态分配TaskManager资源。
部署前提条件:集群中需要安装hadoop。
sudo vim /etc/profile.d/my_env.sh
HADOOP_HOME=/opt/module/hadoop-3.3.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_CLASSPATH=`hadoop classpath`
三种运行模式
会话模式(Session Mode)
- 所有作业共享集群资源,隔离性差,JM 负载瓶颈,main 方法在客户端执行。
- 适合执行时间短,频繁执行的短任务,集群中的所有作业 只有一个 JobManager,另外,Job 被随 机分配给 TaskManager。
单作业模式(Per-Job Mode)
- 每个作业单独启动集群,隔离性好,JM 负载均衡,main 方法在客户端执行。 在 per-job 模式下,每个 Job 都有一个 JobManager,每个 TaskManager 只有单个 Job。
- 作业执行完成后,集群机会关闭,所有资源也会释放。
应用模式(Application Mode)
抛弃客户端,直接把应用提交到JoblMarger上运行。而这也就代表着,我们需要为 每一个提交的应用单独启动一个JobManager,也就是创建一个集群。这个JobManager只为执行这一个应用而存在, 执行结束之后jobManager也就关闭了,这就是应用模式。