Flink StreamExecutionEnvironment 一些细节&Flink 执行模式
2022/3/20 6:29:49
本文主要是介绍Flink StreamExecutionEnvironment 一些细节&Flink 执行模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
flink 上下文换机一些细节
Flink 程序可以在 本地环境运行,也可以在集群环境下运行,不同的运算环境,提交的运行过程也不太一样,这就需要运行程序的时候需要获取上下文环境,从而建立起与flink框架的联系,只有获取到上下文环境信息才能将任务分配到不同的taskmanager上运行。
StreamExecutionEnvironment
在编写flink程序的第一步就是创建环境对象,StreamExecutionEnvironment,它是所有flink程序的基础,在代码中创建的执行环境其实是调用这个类的静态方法
1、getExecutionEnvironment
最简单的方式,就是直接调用getExecutionEnvironment方法。它会根据当前运行的上下文直接得到正确的结果:如果程序是独立运行的,就返回一个本地执行环境;如果是创建了jar包,然后从命令行调用它并提交到集群执行,那么就返回集群的执行环境。也就是说,这个方法会根据当前运行的方式,自行决定该返回什么样的运行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();这种“智能”的方式不需要我们额外做判断,用起来简单高效,是最常用的一种创建执行环境的方式。
2. createLocalEnvironment
这个方法返回一个本地执行环境。可以在调用时传入一个参数,指定默认的并行度;如果不传入,则默认并行度就是本地的CPU核心数。StreamExecutionEnvironment localEnv = StreamExecutionEnvironment.createLocalEnvironment();
我们之前在IDEA运行的wordcount实质就是用的这个方式获取的执行环境。wordcount 打包在集群上用的集群的方式运行
3. createRemoteEnvironment
这个方法返回集群执行环境。需要在调用时指定JobManager的主机名和端口号,并指定要在集群中运行的Jar包。
StreamExecutionEnvironment remoteEnv = StreamExecutionEnvironment.createRemoteEnvironment("host", // JobManager主机名 1234, // JobManager进程端口号 "path/to/jarFile.jar"// 提交给JobManager的JAR包);
在获取到程序执行环境后,我们还可以对执行环境进行灵活的设置。比如可以全局设置程序的并行度、禁用算子链,还可以定义程序的时间语义、配置容错机制。关于时间语义和容错机制,我们会在后续的章节介绍。
执行模式(Execution Mode)
StreamExecutionEnvironment 通过名称来看这个上下文是做流处理的,但是新版本的已经实现流批一体,通过设置flink运行模式可以实现批处理。可以通过execution mode 来设置flink的运行方式。
流执行模式(STREAMING)
- 这是DataStream API最经典的模式,一般用于需要持续实时处理的无界数据流。默认情况下,程序使用的就是STREAMING执行模式。
- 批执行模式(BATCH)专门用于批处理的执行模式, 这种模式下,Flink处理作业的方式类似于MapReduce框架。对于不会持续计算的有界数据,我们用这种模式处理会更方便
- 自动模式(AUTOMATIC)在这种模式下,将由程序根据输入数据源是否有界,来自动选择执行模式。
BATCH模式的配置方法
通过命令行配置
bin/flink run -Dexecution.runtime-mode=BATCH ...
或者通过代码写死
env.setRuntimeMode(RuntimeExecutionMode.BATCH)
设置运行模式需注意:用BATCH模式处理批量数据,用STREAMING模式处理流式数据。因为数据有界的时候,直接输出结果会更加高效;而当数据无界的时候, 我们没得选择——只有STREAMING模式才能处理持续的数据流。
这篇关于Flink StreamExecutionEnvironment 一些细节&Flink 执行模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升