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) 

  1. 这是DataStream API最经典的模式,一般用于需要持续实时处理的无界数据流。默认情况下,程序使用的就是STREAMING执行模式。
  2. 批执行模式(BATCH)专门用于批处理的执行模式, 这种模式下,Flink处理作业的方式类似于MapReduce框架。对于不会持续计算的有界数据,我们用这种模式处理会更方便
  3. 自动模式(AUTOMATIC)在这种模式下,将由程序根据输入数据源是否有界,来自动选择执行模式。

BATCH模式的配置方法

通过命令行配置 

bin/flink run -Dexecution.runtime-mode=BATCH ...

或者通过代码写死

env.setRuntimeMode(RuntimeExecutionMode.BATCH)

设置运行模式需注意:用BATCH模式处理批量数据,用STREAMING模式处理流式数据。因为数据有界的时候,直接输出结果会更加高效;而当数据无界的时候, 我们没得选择——只有STREAMING模式才能处理持续的数据流。

 



这篇关于Flink StreamExecutionEnvironment 一些细节&Flink 执行模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程