Flink学习笔记(三)任务之间数据共享机制
创始人
2024-06-02 19:12:17

一、概述:

        Flink中用于在任务之间共享数据的三种机制。包括Broadcast、Accumulator和Distributed Cache,这三种机制可以帮助开发者更好地解决任务之间数据交互的问题。

二、Flink Broadcast(广播变量):

1.简介:

        Broadcast是指将一个数据集广播到任务的所有并行实例中。在Flink中,可以使用Broadcast机制将小数据集分发到每个任务实例中,以便在任务的运行过程中能够快速访问。Broadcast数据集的大小应该小于可用内存的大小,以防止内存溢出。

2.与DataStream Broadcast(分区规则)区别:

        分区规则是把元素广播给所有的分区,数据会被重复处理,类似于Storm中的allGrouping。

        广播变量允许编程人员在每台机器上保持一个只读的缓存变量,而不是传送变量的副本给Task。k。广播变量创建后,它可以运行在集群中的任何Function上,而不需要多次传递给集群节点。

  另外请记住,不要修改广播变量,这样才能确保每个节点获取到的值都是一致的。

       用一句话解释,Broadcast可以理解为一个公共的共享变量。可以把一个DataSet(数据集)广播出去,不同的Task在节点上都能够获取到它,这个数据集在每个节点上只会存在一份。如果不使用Broadcast,则在各节点的每个Task中都需要复制一份DataSet数据集,比较浪费内存(也就是一个节点中可能会存在多份DataSet数据)。

三.Flink Accumulator

1.原理及使用

      Flink Accumulator 是 Flink 中的一种特殊变量,用于在分布式环境中对数据进行累加或聚合操作。Flink Accumulator 主要用于在 Flink 的数据并行计算中,对数据的中间结果进行累加,以便最终得到计算结果。Accumulator 可以在作业运行过程中,逐步累加计算结果,并将最终结果返回给客户端。Flink 提供了多种类型的 Accumulator,包括 LongCounter、DoubleCounter、Histogram、MinMax、List 等,开发者可以根据需要选择合适的类型。使用 Accumulator 可以有效地减少网络传输和数据存储的开销,提高计算效率和性能。

累加器的使用步骤如下。
(1)创建累加器。
private IntCounter numLines = new IntCounter();
(2)注册累加器。
getRuntimeContext().addAccumulator("num-lines", this.numLines);
(3)使用累加器。
this.numLines.add(1);
(4)获取累加器的结果。
myJobExecutionResult.getAccumulatorResult("num-lines")
累加器需求:计算map函数中处理了多少数据

注意:只有在任务执行结束后,才能获取累加器的值

2.Flink Broadcast和Accumulator的区别

        Broadcast允许程序员将一个只读的变量缓存在每台机器上,而不用在任务之间传递变量。广播变量可以进行共享,但是不可以进行修改。
        Accumulator可以在不同任务中对同一个变量进行累加操作,但是只有在任务执行结束的时候才能获得累加器的最终结果。

四、Flink Distributed Cache

1.简介

        Flink提供了一个分布式缓存(Distributed Cache),类似于Hadoop,可以使用户在并行函数中很方便地读取本地文件。分布式缓存功能允许有效地在任务和作业运行之间共享数据,减少数据重复和提高性能。它通过将文件或其他资源分发到集群中的任务管理器中,其中可以由运行在这些节点上的任务访问来实现。

        Flink Distributed Cache特别适用于管理大型参考数据集或配置文件,因为它允许用户一次将这些资源加载到内存中,并跨多个任务或作业运行共享它们。它还允许动态更新分布式缓存,因此用户可以根据需要轻松添加或删除资源。

(2)使用步骤。

(1)注册一个文件。
env.registerCachedFile("hdfs:///path/to/your/file", "hdfsFile")
(2)访问数据。
File myFile = getRuntimeContext().getDistributedCache().getFile("hdfsFile")

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...