Flink 源码剖析|RuntimeContext 接口

这篇具有很好参考价值的文章主要介绍了Flink 源码剖析|RuntimeContext 接口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

每个并行的实例都会包含一个 RuntimeContextRuntimeContext 接口包含函数执行的上下文信息,提供了如下功能:

  • 访问静态上下文信息(例如当前并行度)
  • 添加及访问累加器
  • 访问外部资源信息
  • 访问广播变量和分布式缓存
  • 访问并编辑状态

下面,我们逐类介绍 RuntimeContext 接口的方法。

Flink 源码剖析|RuntimeContext 接口,Flink,flink,RuntimeContext

1 访问静态上下文信息

RuntimeContext 的包括如下获取静态上下文信息的方法:

  • getJobId():获取当前作业的 ID。
  • getTaskName():获取执行 UDF 的 task 名称。
  • getMetricGroup():获取当前 subtask 的指标组。
  • getNumberOfParallelSubtasks():获取执行 UDF 的 task 的并行度。
  • getMaxNumberOfParallelSubtasks():获取执行 UDF 的 task 的最大并行度。
  • getIndexOfThisSubtask():获取执行 UDF 的 subtask 的编号(编号从 0 开始)。
  • getAttemptNumber():获取执行 UDF 的 subtask 的尝试次数(第一次尝试的次数是 0)。
  • getTaskNameWithSubtasks():获取执行 UDF 的 subtask 的名称。这个名称如下 {任务名称} ({subtask的编号}/{并行度})#{尝试次数},例如 MyTask (3/6)#1,其中 {任务名称}getTaskName() 的返回值,{subtask的编号}getIndexOfThisSubtask() + 1{并行度}getNumberOfParallelSubtasks() 的返回值,{尝试次数}getAttemptNumber() 的返回值。
  • getExecutionConfig():获取当前作业的执行配置。
  • createSerializer(TypeInformation<T> typeInformation):获取指定类型的序列化器。
  • getGlobalJobParameters():获取作业的全局参数。
  • isObjectReuseEnabled():获取对象重用是否开启。
  • getUserCodeClassLoader():获取用户类(不在系统 classpath 的类)的加载器。
  • registerUserCodeClassLoaderReleaseHookIfAbsent(String releaseHookName, Runnable releaseHook):在用户类加载器中注册自定义 hook。

大概可以归纳为如下几种类型

  • 作业、task、subtask 的基本信息及尝试次数
  • 指标组信息
  • 包括序列化器和类加载器在内的配置信息

源码|Github|org.apache.flink.api.common.functions.RuntimeContext(部分)文章来源地址https://www.toymoban.com/news/detail-835339.html

JobID getJobId();

String getTaskName();

@PublicEvolving
OperatorMetricGroup getMetricGroup();

int getNumberOfParallelSubtasks();

@PublicEvolving
int getMaxNumberOfParallelSubtasks();

int getIndexOfThisSubtask();

int getAttemptNumber();

String getTaskNameWithSubtasks();

@Deprecated
ExecutionConfig getExecutionConfig();

@PublicEvolving
<T> TypeSerializer<T> createSerializer(TypeInformation<T> typeInformation);

@PublicEvolving
Map<String, String> getGlobalJobParameters();

@PublicEvolving
boolean isObjectReuseEnabled();

ClassLoader getUserCodeClassLoader();

@PublicEvolving
void registerUserCodeClassLoaderReleaseHookIfAbsent(
        String releaseHookName, Runnable releaseHook);

2 添加及访问累加器

RuntimeContext 的包括如下累加器相关的方法:

  • addAccumulator(String name, Accumulator<V, A> accumulator):添加累加器
  • Accumulator<V, A> getAccumulator(String name):获取基础类型的累加器
  • getIntCounter(String name):获取 IntCounter 类型的累加器
  • getLongCounter(String name):获取 LongCounter 类型的累加器
  • getDoubleCounter(String name):获取 DoubleCounter 类型的累加器
  • getHistogram(String name):获取直方图类型的累加器

源码|Github|org.apache.flink.api.common.functions.RuntimeContext(部分)

<V, A extends Serializable> void addAccumulator(String name, Accumulator<V, A> accumulator);

<V, A extends Serializable> Accumulator<V, A> getAccumulator(String name);

@PublicEvolving
IntCounter getIntCounter(String name);

@PublicEvolving
LongCounter getLongCounter(String name);

@PublicEvolving
DoubleCounter getDoubleCounter(String name);

@PublicEvolving
Histogram getHistogram(String name);

3 访问外部资源

RuntimeContext 提供了 getExternalResourceInfos(String resourceName) 外部资源信息。

源码|Github|org.apache.flink.api.common.functions.RuntimeContext#getExternalResourceInfos

@PublicEvolving
Set<ExternalResourceInfo> getExternalResourceInfos(String resourceName);

4 访问广播变量

RuntimeContext 提供了如下访问广播变量的方法:

  • hasBroadcastVariable(String name):检查是否包含名称为 name 的广播变量
  • getBroadcastVariable(String name):返回名称为 name 的广播变量
  • getBroadcastVariableWithInitializer(String name, BroadcastVariableInitializer<T, C> initializer):返回名称为 name 的广播变量,并使用 initializer 初始化。
  • getDistributedCache():访问分布式缓存。

源码|Github|org.apache.flink.api.common.functions.RuntimeContext(部分)

@PublicEvolving
boolean hasBroadcastVariable(String name);

<RT> List<RT> getBroadcastVariable(String name);

<T, C> C getBroadcastVariableWithInitializer(
        String name, BroadcastVariableInitializer<T, C> initializer);

DistributedCache getDistributedCache();

5 访问并编辑状态

RuntimeContext 提供了如下方法用于获取不同类型的状态对象,在获取到状态对象后,可以对状态对象进行编辑:

  • getState(ValueStateDescriptor<T> stateProperties):获取 ValueState 类型的状态对象
  • getListState(ListStateDescriptor<T> stateProperties):获取 ListState 类型的状态对象
  • getReducingState(ReducingStateDescriptor<T> stateProperties):获取 ReducingState 类型的状态对象
  • getAggregatingState(AggregatingStateDescriptor<IN, ACC, OUT> stateProperties):获取 AggregatingState 类型的状态对象
  • getMapState(MapStateDescriptor<UK, UV> stateProperties):获取 MapState 类型的状态对象

源码|Github|org.apache.flink.api.common.functions.RuntimeContext(部分)

@PublicEvolving
<T> ValueState<T> getState(ValueStateDescriptor<T> stateProperties);

@PublicEvolving
<T> ListState<T> getListState(ListStateDescriptor<T> stateProperties);

@PublicEvolving
<T> ReducingState<T> getReducingState(ReducingStateDescriptor<T> stateProperties);

@PublicEvolving
<IN, ACC, OUT> AggregatingState<IN, OUT> getAggregatingState(
        AggregatingStateDescriptor<IN, ACC, OUT> stateProperties);

@PublicEvolving
<UK, UV> MapState<UK, UV> getMapState(MapStateDescriptor<UK, UV> stateProperties);

到了这里,关于Flink 源码剖析|RuntimeContext 接口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flink系列之Flink中StateBackend深入剖析和应用

    title: Flink系列 ​ StateBackend 定义了状态是如何存储的,不同的 State Backend 会采用不同的方式来存储状态,核心入口是: StateBackend, Flink 提供了三种不同形式的存储后端,分别是 MemoryStateBackend, FsStateBackend 和 RocksDBStateBackend。 MemoryStateBackend 会将工作状态(Task State)存储在 T

    2024年02月16日
    浏览(37)
  • Flink基本原理剖析讲解

    Flink是一个批处理和流处理结合的统一计算框架,其核心是一个提供了数据分发以及并行化计算的流数据处理引擎。它的最大亮点是流处理,是业界最顶级的开源流处理引擎。 Flink最适合的应用场景是低时延的数据处理(Data Processing)场景:高并发pipeline处理数据,时延毫秒级

    2024年02月16日
    浏览(40)
  • Flink-网络流控及反压剖析

    参考: Apache Flink学习网

    2024年02月13日
    浏览(32)
  • 大数据Flink简介与架构剖析并搭建基础运行环境

    前面我们分别介绍了大数据计算框架Hadoop与Spark,虽然他们有的有着良好的分布式文件系统和分布式计算引擎,有的有着分布式数据集和基于内存的分布式计算引擎,但是却不能对无边界数据流进行有效处理,今天我们就分享一个第四代大数据分布式计算框架Flink简介与架构剖

    2024年02月10日
    浏览(53)
  • flink源码分析 - flink命令启动分析

    flink版本: flink-1.12.1 源码位置:  flink-dist/src/main/flink-bin/bin/flink flink命令源码: 首先讲第一段: 工作中,很多人喜欢用符号链接(软连接)去将原始命令链接到一个新的文件。 例如:  将 /home/aaa链接到/opt/soft/flink-1.12.1/bin/flink,  实际使用的时候就可以用 aaa去代替flink命令。 例如

    2024年01月18日
    浏览(39)
  • Flink(一):flink源码&&导入到IDE

    一、获取源码 1、从 Git 克隆代码 2、maven运行编译 注:为了加速构建,可以执行如下命令,以跳过测试,QA 的插件和 JavaDocs 的生成:   二、环境 1、JDK8 运行单元测试需要 Java 8u51 以上的版本,以避免使用 PowerMock Runner 的单元测试失败。 2、maven3 *注意:Maven 3.3.x 可以构建 Fl

    2024年02月05日
    浏览(48)
  • Flink流数据接口与操作

    Flink是一个流处理框架,用于处理大规模的实时数据流。它提供了一种新的、高效的流处理模型,可以处理大量的数据,并在实时处理数据的同时,保持低延迟和高吞吐量。Flink流数据接口与操作是流处理的核心部分,它提供了一种高效的方式来处理和操作流数据。 在本文中

    2024年02月22日
    浏览(36)
  • 【Flink精讲】Flink内核源码分析:命令执行入口

    官方推荐per-job模式,一个job一个集群,提交时yarn才分配集群资源; 主要的进程:JobManager、TaskManager、Client 提交命令:bin/flink run -t yarn-per-job  /opt/module/flink-1.12.0/examples/streaming/SocketWindowWordCount.jar --port 9999 Per-job进程: CliFronted、YarnJobClusterEncrypoint、TaskExecutorRunner=TaskManagerRunn

    2024年02月21日
    浏览(44)
  • 【Flink】Flink 的八种分区策略(源码解读)

    Flink 包含 8 种分区策略,这 8 种分区策略(分区器)分别如下面所示,本文将从源码的角度解读每个分区器的实现方式。 GlobalPartitioner ShufflePartitioner RebalancePartitioner RescalePartitioner BroadcastPartitioner ForwardPartitioner KeyGroupStreamPartitioner CustomPartitionerWrapper 该分区器会将所有的数据都

    2024年04月10日
    浏览(36)
  • 深入理解 Flink(三)Flink 内核基础设施源码级原理详解

    深入理解 Flink 系列文章已完结,总共八篇文章,直达链接: 深入理解 Flink (一)Flink 架构设计原理 深入理解 Flink (二)Flink StateBackend 和 Checkpoint 容错深入分析 深入理解 Flink (三)Flink 内核基础设施源码级原理详解 深入理解 Flink (四)Flink Time+WaterMark+Window 深入分析 深入

    2024年01月24日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包