System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 采用键值分离改进Flink HashMapStateBackend的方法技术_技高网

采用键值分离改进Flink HashMapStateBackend的方法技术

技术编号:40561617 阅读:5 留言:0更新日期:2024-03-05 19:24
本发明专利技术公开了一种采用键值分离改进Flink HashMapStateBackend的方法,将数据的键与值分开存储,键全部保留在存储节点中,值存储在磁盘的文件中。该方法包括对存储节点按照访问顺序建立和维护索引;定时检测内存的使用情况,每当内存空间的使用超过规定阈值时,按照索引对存储节点进行键值分离;从存储节点中分离的值,根据分离的先后顺序存储在文件中;对于已经键值分离的数据,修改该数据的值时认为该值失效,定时计算失效率,每当失效率达到规定阈值时,选择失效率高于规定阈值的文件进行清理。本发明专利技术解决了Flink双流Join作业场景下使用Flink EmbeddedRocksDBStateBackend性能不够理想的问题。

【技术实现步骤摘要】

本专利技术涉及flink流计算和键值存储的,尤其是指一种采用键值分离改进flink hashmapstatebackend的方法。


技术介绍

1、flink提供两种开箱即用的状态后端:将数据全部存储在内存的flinkhashmapstatebackend和将数据主要存储在磁盘的flink embeddedrocksdbstatebackend。flink hashmapstatebackend作为flink的全内存状态后端,对数据的访问均为内存操作,具有很好的存取性能,但是可容纳的数据量受集群可用内存的限制,只适用于数据量小的flink作业场景,当flink作业数据量变大时,容易发生内存溢出异常,造成flink作业不断重启,影响flink作业的生产稳定性。flink embeddedrocksdbstatebackend将数据主要存储在磁盘上,可以容纳很大的数据量,是flink作业通用的状态后端,但是由于磁盘的存取性能远低于内存的存取性能,flink embeddedrocksdbstatebackend的性能不如flinkhashmapstatebackend。

2、键值分离最初用于优化采用lsm-tree存储结构的存储系统,其核心思想是,将值分离出lsm-tree存储结构进行单独存储,减小lsm-tree存储结构中存储的数据量,提升访问lsm-tree存储结构的性能,并减少lsm-tree存储结构中合并文件的开销。

3、flink双流join作业场景是一种经典的flink作业场景,该作业场景下数据量大,且数据主要具有以下特点:值占用的存储空间远大于键占用的存储空间且访问值的频率远小于访问键的频率。目前flink双流join作业场景只能使用flinkembeddedrocksdbstatebackend。本专利技术通过采用键值分离改进flinkhashmapstatebackend,提供一种适用于flink双流join作业场景的性能更好的状态后端。


技术实现思路

1、本专利技术的目的在于克服现有技术的缺点与不足,提出了一种采用键值分离改进flink hashmapstatebackend的方法,将数据的键与值分开存储,键全部保留在内存的存储节点中,值存储在磁盘的文件中,一方面使得内存能够容纳更多的键,从而扩大flinkhashmapstatebackend可容纳的数据量,使其可以运用在flink双流join作业场景下;另一方面由于访问值的频率远小于访问键的频率,键值分离将键保留在内存中,充分发挥内存作为数据访问的主存储,存取性能高的优势。

2、为实现上述目的,本专利技术所提供的技术方案为:采用键值分离改进flinkhashmapstatebackend的方法,所述flink hashmapstatebackend中存储的数据均由键和值两个部分组成,每个数据存储在一个位于内存的存储节点内;该方法是采用键值分离的方法改进flink hashmapstatebackend,将数据的键与值分开存储,键全部保留在存储节点中,值存储在磁盘的文件中;该方法的具体实施包括以下步骤:

3、s1:根据数据的键在hashmap结构中找到该数据所在的存储节点,并对存储节点按照访问顺序建立和维护索引;

4、s2:定时检测内存的使用情况,每当内存空间的使用超过规定阈值时触发键值分离,根据对存储节点按照访问顺序建立的索引,从最久未访问的存储节点开始进行键值分离,分离该存储节点中的值存储到文件中,并在存储节点中存储能够唯一标识该值的数字,该数字按照值被分离的先后顺序严格递增,键值分离直至分离的值达到规定数据量时结束;

5、s3:从存储节点中分离的值,根据分离的先后顺序存储在文件中;

6、s4:对于已经键值分离的数据,修改该数据的值不会对文件进行修改,而是认为该值失效,并记录失效的值的个数,定时计算失效率,每当失效率达到规定阈值时,选择失效率高于规定阈值的文件进行清理,将纳入选择的文件中仍然有效的值写在新文件中,并用新文件替换纳入选择的文件,纳入选择的文件在被替换之后删除,从而完成清理。

7、进一步,步骤s1的具体操作步骤如下:

8、s11:根据数据的键,在hashmap结构中找到该数据所在的存储节点;

9、s12:将存储节点按照访问顺序组织为双向链表的结构进行索引,每个存储节点有两个指针,分别指向访问该存储节点时前一个访问的存储节点和访问该存储节点时后一个访问的存储节点,位于双向链表头部的存储节点即为最近刚访问的存储节点,位于双向链表尾部的存储节点即为最久未访问的存储节点;

10、s13:访问数据时,该数据对应的存储节点成为最近刚访问的存储节点,修改该存储节点的指针以及相关存储节点的指针,从而将该存储节点移动到双向链表头部。

11、进一步,步骤s2的具体操作步骤如下:

12、s21:通过java虚拟机提供的垃圾回收时间和内存使用量共同作为指标衡量内存的使用情况,定时检测上述两项指标,当该两项指标超过规定阈值时,触发键值分离;

13、s22:触发键值分离时,根据对存储节点按照访问顺序建立的索引,从最久未访问的存储节点开始,按照访问顺序对存储节点进行键值分离,将该存储节点的值分离存储到文件中,并在该存储节点中存储能够唯一标识该值的数字,该数字按照值被分离的先后顺序严格递增,键值分离直至分离的值达到规定数据量时结束。

14、进一步,步骤s3的具体操作步骤如下:

15、s31:从存储节点中分离的值首先在写缓冲中进行攒批,当攒批的分离的值达到规定数据量时,将这些攒批的分离的值存储到当前正在写的文件中;

16、s32:当当前正在写的文件达到规定的文件大小后,该文件成为一个不可变文件,并创建新的当前正在写的文件,存储之后分离的值。

17、进一步,步骤s4的具体操作步骤如下:

18、s41:为每个文件记录该文件包含的值的总数和该文件包含的失效值的总数,该文件的失效率等于该文件包含的失效值的总数除以该文件包含的值的总数;定时计算分离的值的总失效率,总失效率等于所有文件包含的失效值的总数除以所有文件包含的值的总数;

19、s42:每当总失效率达到规定阈值时,选择失效率高于规定阈值的文件进行清理,选择文件的方法过程为:首先,将失效率最高的文件纳入选择,然后查看与该文件生成时间最近的文件的失效率,高于规定阈值则纳入选择,并查看与新纳入选择的文件生成时间最近的文件的失效率,高于规定阈值则纳入选择,重复上述过程直至与新纳入选择的文件生成时间最近的文件的失效率不高于规定阈值时停止选择;

20、s43:清理纳入选择的文件包含的失效的值:通过查找所有的存储节点,确定纳入选择的文件中包含的有效的值,将这些有效的值写入新文件,并用新文件替换纳入选择的文件,纳入选择的文件在被替换之后删除,从而完成清理。

21、本专利技术与现有技术相比,具本文档来自技高网...

【技术保护点】

1.采用键值分离改进Flink HashMapStateBackend的方法,所述FlinkHashMapStateBackend中存储的数据均由键和值两个部分组成,每个数据存储在一个位于内存的存储节点内,其特征在于,该方法是采用键值分离的方法改进FlinkHashMapStateBackend,将数据的键与值分开存储,键全部保留在存储节点中,值存储在磁盘的文件中;该方法的具体实施包括以下步骤:

2.根据权利要求1所述的采用键值分离改进Flink HashMapStateBackend的方法,其特征在于,步骤S1的具体操作步骤如下:

3.根据权利要求2所述的采用键值分离改进Flink HashMapStateBackend的方法,其特征在于,步骤S2的具体操作步骤如下:

4.根据权利要求3所述的采用键值分离改进Flink HashMapStateBackend的方法,其特征在于,步骤S3的具体操作步骤如下:

5.根据权利要求4所述的采用键值分离改进Flink HashMapStateBackend的方法,其特征在于,步骤S4的具体操作步骤如下:

...

【技术特征摘要】

1.采用键值分离改进flink hashmapstatebackend的方法,所述flinkhashmapstatebackend中存储的数据均由键和值两个部分组成,每个数据存储在一个位于内存的存储节点内,其特征在于,该方法是采用键值分离的方法改进flinkhashmapstatebackend,将数据的键与值分开存储,键全部保留在存储节点中,值存储在磁盘的文件中;该方法的具体实施包括以下步骤:

2.根据权利要求1所述的采用键值分离改进flink hashmapstatebackend的...

【专利技术属性】
技术研发人员:李芷萱李晋忠张星明梅源
申请(专利权)人:华南理工大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1