1.Flink集群启动模式
2.深入解析StandaloneSessionClusterEntrypoint类、ClusterEntrypoint.runClusterEntrypoint()/startCluster()方法
2.本节内容
1.集群启动模式
2.集群启动和初始化
3、本节详细内容
1.集群启动模式
ClusterEntrypoint是Flink集群入口点的基类,该类是抽象类,实现着有
SessionClusterEntrypoint、JobClusterEntrypoint、ApplicationClusterEntryPoint
1.Per-job
每一个提交的Job单独创建一套完整集群环境,该Job独享使用的计算资源和组件服务。
任务之间的资源隔离性好。已经被标记为不推荐使用状态
2.Session
Session集群能够运行多个Flink作业,切这些作业共享运行中的Dispatcher、ResourceManager等组件服务。
集群资源使用率高
3.Application
对于per-job模式,jar包的解析、生成JobGraph是在客户端上执行的,如果任务特别多的话,那么这些生成JobGraph会对客户端服务器有压力。
Application 模式会在客户端将运行任务需要的依赖都上传到 Flink Master,然后在 Master 端进行任务的提交。
如果一个main()方法中有多个env.execute()/executeAsync(),在Application模式下,这些作业会被视为属于同一个应用,在同一个集群中执行(如果在Per-Job模式下,就会启动多个集群)。
Application模式弥补了per-job的不足。
config.yaml
–javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown
# JobManager 的主机地址
jobmanager.rpc.address: localhost
# The RPC port where the JobManager is reachable.
#可访问JobManager的RPC端口
jobmanager.rpc.port: 6123
#jobmanager绑定ip,
jobmanager.bind-host: localhost
#JVM 进程总内存
jobmanager.memory.process.size: 1600m
#taskmanager绑定ip,
taskmanager.bind-host: localhost
#唯一标识 window下必须配置
taskmanager.resource-id: q1
taskmanager.cpu.cores: 1
#任务的堆内存
taskmanager.memory.task.heap.size: 512m
#托管内存
taskmanager.memory.managed.size: 512m
#网络内存(Network Memory)
taskmanager.memory.network.min: 128m
taskmanager.memory.network.max: 128m
#任务堆外内存
taskmanager.memory.task.off-heap.size: 0m
#框架内存
taskmanager.memory.framework.heap.size: 256m
#框架堆外内存
taskmanager.memory.framework.off-heap.size: 128m
#JVM Metaspace
taskmanager.memory.jvm-metaspace.size: 128m
#JVM 开销
taskmanager.memory.jvm-overhead.min: 128m
taskmanager.memory.jvm-overhead.max: 128m
#心跳参数
heartbeat.timeout: 50000
heartbeat.interval: 10000
taskmanager.host: localhost
# 进程总内存大小
taskmanager.memory.process.size: 1728m
#每个 TaskManager上并发的 slot 数
taskmanager.numberOfTaskSlots: 1
# The parallelism used for programs that did not specify and other parallelism.
#用于未指定的程序的并行度和其他并行度。
parallelism.default: 1
jobmanager.execution.failover-strategy: region
rest.address: localhost
rest.bind-address: localhost
StandaloneSessionClusterEntrypoint入口类
–javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown
参数1:-Dlog.file=./log/flink-jobmanager-1.local.log -Dlog4j.configuration=./a_conf/log4j.properties -Dlog4j.configurationFile=./a_conf/log4j.properties -Dlogback.configurationFile=./a_conf/logback.xml
参数2:-c config
参数3:添加a_lib下的jar
–javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown
package org.apache.flink.runtime.entrypoint;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.runtime.entrypoint.component.DefaultDispatcherResourceManagerComponentFactory;
import org.apache.flink.runtime.resourcemanager.StandaloneResourceManagerFactory;
import org.apache.flink.runtime.util.EnvironmentInformation;
import org.apache.flink.runtime.util.JvmShutdownSafeguard;
import org.apache.flink.runtime.util.SignalHandler;
/** Entry point for the standalone session cluster. */
/** Session集群的入口点 */
public class StandaloneSessionClusterEntrypoint extends SessionClusterEntrypoint {
/** main函数中进行构造传入Configuration */
public StandaloneSessionClusterEntrypoint(Configuration configuration) {
super(configuration);
}
/**
* 构造DefaultDispatcherResourceManagerComponentFactory对象
* ClusterEntrypoint.createDispatcherResourceManagerComponentFactory 初始化
* Dispatcher,ResourceManager时候会被调用
* 这个在初始化组件的时候需要会被调用
* @param configuration
* @return
*/
@Override
protected DefaultDispatcherResourceManagerComponentFactory
createDispatcherResourceManagerComponentFactory(Configuration configuration) {
return DefaultDispatcherResourceManagerComponentFactory.createSessionComponentFactory(
StandaloneResourceManagerFactory.getInstance());
}
/** args=["-c","a_conf"] */
public static void main(String[] args) {
// startup checks and logging
/**检查参数和启动日志*/
EnvironmentInformation.logEnvironmentInfo(
LOG, StandaloneSessionClusterEntrypoint.class.getSimpleName(), args);
/**
* SignalHandler信号注册器
* Flink 进程启动时的一部分初始化步骤以确保在接收到终止信号时能够优雅地关闭。
* 如,当 Flink 作业管理器(JobManager)或任务管理器(TaskManager)接收到 SIGTERM 信号时,
* 信号处理器可能会被触发,以开始关闭进程并释放资源。
*/
SignalHandler.register(LOG);
/**
* 注册一个安全关闭钩子。
* 当 JVM 接收到终止信号(如 SIGTERM 或 SIGINT)或调用 System.exit() 方法时,
* 可以确保在 JVM 关闭前执行必要的清理和释放资源操作。
* 注册一个安全关闭钩子。JVM允许花费的最长时间被杀死前的关机时间是5秒。
* 5秒之内不关闭则强制调用Runtime.getRuntime().halt(EXIT_CODE)关闭see JvmShutdownSafeguard.run
*/
JvmShutdownSafeguard.installAsShutdownHook(LOG);
/**
* 设置配置的目录
* configDir=a_conf
*/
final EntrypointClusterConfiguration entrypointClusterConfiguration =
ClusterEntrypointUtils.parseParametersOrExit(
args,
new EntrypointClusterConfigurationParserFactory(),
StandaloneSessionClusterEntrypoint.class);
/**
* 加载配置参数
* flink-conf.yaml 中配置的参数
*/
Configuration configuration = loadConfiguration(entrypointClusterConfiguration);
/** 将configuration 传入 StandaloneSessionClusterEntrypoint 创建对象*/
StandaloneSessionClusterEntrypoint entrypoint =
new StandaloneSessionClusterEntrypoint(configuration);
/**
* 最终会调用 ClusterEntrypoint.runClusterEntrypoint
* 所有的初始化最终都会在ClusterEntrypoint 进行
*/
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/7783226eeb558df96dd5d64db40e18fc.png)
![img](https://img-blog.csdnimg.cn/img_convert/cb15993261a7d1a4cdfb67dd8c858de4.png)
![img](https://img-blog.csdnimg.cn/img_convert/9d5a3f7e72297629f3eb4dc200972365.png)
![img](https://img-blog.csdnimg.cn/img_convert/63445b7dffae1436d9b86c6eb996ca43.png)
![img](https://img-blog.csdnimg.cn/img_convert/98a964d420536aa465e7b64ea14f140a.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)**
![img](https://img-blog.csdnimg.cn/img_convert/8a710dfb6fd1375aa691ea6d7589db83.png)
**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)**
[外链图片转存中...(img-Pwmo17z9-1712962108783)]
**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**