Hudi小文件压缩

2024-03-07 11:28
文章标签 压缩 hudi

本文主要是介绍Hudi小文件压缩,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在Hudi表上进行压缩操作,不同于传统数据库表的压缩操作,Hudi表的压缩操作主要是用于删除或归档已经过期的数据记录,从而减少表的大小和提高查询性能。Hudi的离线压缩是通过将对同一数据集进行的小型文件的集合进行组合来实现的。

在Flink中,进行Hudi表的离线压缩时,同一时间只能压缩一个commit。这是因为在Hudi表上执行离线压缩时,需要将表中的所有数据记录读取到内存中,进行压缩操作后再重新写入表中。由于Hudi表比较大,如果同时对多个commit进行压缩操作,可能会导致系统内存不足以容纳所有数据,从而导致OOM(Out of Memory)错误。

因此,为了避免OOM错误和提高离线压缩效率,Flink在进行Hudi表离线压缩时,只能压缩一个commit。可以在离线压缩完成后,再压缩下一个commit。而且通常Hudi表中每个commit保存的数据量不会太大,因此连续对多个commit进行压缩操作,也会导致压缩效率变得很低。因此,针对比较大的Hudi表,建议在离线压缩操作期间,对多个commit进行分批处理,以提高离线压缩速度和避免系统OOM错误的发生。

Flink离线压缩Hudi表每次只压缩一个commit的原因可能是为了避免数据丢失和保证数据一致性。Hudi表是基于时间轴的数据存储结构,每个commit包含了一段时间内的数据变化。如果一次性压缩多个commit,可能会导致数据丢失或不一致,因为压缩过程中可能会涉及到多个commit之间的数据变化。因此,为了保证数据的完整性和一致性,Flink离线压缩Hudi表每次只压缩一个commit,以保证数据的正确性。

在Apache Hudi中,每次对表进行修改都会生成一个Hudi数据集的commit。一个commit是一个Hudi的数据版本,它可以看作是一个标记点,记录了数据在某一时间点的状态。当我们使用Flink进行离线压缩时,就是把这些commit中的数据整理为一个更加紧凑的数据集。

默认情况下,Hudi的compaction操作并不会一次性压缩所有commit,而是在后台周期性地运行compaction任务,每一次任务会选择合适的commit进行压缩。这样做的好处是保证了压缩操作对系统性能的影响最小,同时也可以把压缩操作分散到多次运行中,避免因为数据太大而导致压缩过程过于耗时。

如果您想一次性对多个commit进行压缩,可以手动触发Hudi的compaction任务。在Flink中,可以通过HudiCompactionConfig来配置触发compaction任务的参数,例如:配置需要压缩的commit时间段、要执行compaction的表名等,然后在Flink的作业中调用HoodieFlinkWriteHelper.runCompaction()方法即可。

需要注意的是,一次性压缩多个commit可能会占用大量的磁盘空间和系统资源,因此在进行这样的操作之前,请先评估您的系统资源和性能瓶颈,以确保操作的顺利进行。

压缩一个commit是为了避免在压缩过程中丢失提交的数据。当我们压缩多个commit时,会先将这些commit的数据合并到一个新的commit里面,然后再进行压缩,但是如果在合并的过程中发生了故障,就有可能导致合并后的数据丢失,这样就会导致数据不完整或者出现错误。

为了避免这种情况的发生,flink离线压缩hudi表每次只压缩一个commit,这样可以保证每个commit的数据都被完整地压缩,同时也减小了故障发生的概率,提高了数据的可靠性。此外,这种方式还可以实现增量压缩,只压缩新增或者修改的数据,而不需要重新压缩整个数据集,可以提高压缩效率。

在Flink中使用Hudi进行离线压缩时,通常会按照commit进行压缩。每个commit对应着一批数据的写入操作,可以将这些写入操作的数据进行合并和压缩,以减少存储空间和提高查询性能。

你可以使用Hudi的CompactionAPI来进行离线压缩。CompactionAPI会按照commit时间顺序依次对Hudi表中的数据进行压缩,每次只压缩一个commit对应的数据。在压缩过程中,CompactionAPI会将多个commit对应的数据进行合并和压缩,以减少存储空间和提高查询性能。

每次压缩一个commit对应的数据,可以保证压缩过程的可控性和稳定性。同时,可以根据实际情况设置CompactionAPI的参数,如压缩策略、压缩比例、并发度等,以提高压缩效率和性能。

Flink 离线压缩 Hudi 表每次只压缩一个 commit 的原因是为了保证压缩的准确性和可靠性。

首先,Hudi 表是通过多个 commit 构成的,每个 commit 都包含着一定时间范围内的数据变更信息。在进行离线压缩时,需要对这些 commit 分别进行处理,以确保数据的完整性和正确性。

其次,如果一次性对多个 commit 进行压缩,可能会导致数据不一致或丢失的情况发生。例如,如果在对多个 commit 进行压缩过程中,其中一个 commit 的数据发生了变化,那么可能会影响其他 commit 的数据,进而影响整个数据集的完整性和正确性。

Flink 离线压缩 Hudi 表时每次只压缩一个 commit 的原因是为了确保数据的一致性和完整性。在 Hudi 中,每个 commit 对应着一批数据的写入操作,这些写入操作可能是由不同的任务或线程同时执行的,因此如果一次性压缩多个 commit,可能会导致数据的不一致性和错误。

另外,每个 commit 的数据量可能会比较大,一次性压缩多个 commit 也可能会导致压缩任务的负载过重,影响整个系统的性能。因此,分批压缩每个 commit 可以更好地平衡系统负载,提高系统的稳定性和可靠性。

如果您希望一次性压缩多个 commit,可以通过编写自定义的压缩函数来实现。但需要注意的是,自定义的压缩函数需要考虑数据的一致性和完整性,以及系统的性能和稳定性。

参考:

为啥flink离线压缩hudi表 每次只压缩一个commit呀_问答-阿里云开发者社区

这篇关于Hudi小文件压缩的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/783339

相关文章

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

hdu1565(状态压缩)

本人第一道ac的状态压缩dp,这题的数据非常水,很容易过 题意:在n*n的矩阵中选数字使得不存在任意两个数字相邻,求最大值 解题思路: 一、因为在1<<20中有很多状态是无效的,所以第一步是选择有效状态,存到cnt[]数组中 二、dp[i][j]表示到第i行的状态cnt[j]所能得到的最大值,状态转移方程dp[i][j] = max(dp[i][j],dp[i-1][k]) ,其中k满足c

通用内存快照裁剪压缩库Tailor介绍及源码分析(一)

背景 我们知道内存快照是治理 OOM 问题及其他类型的内存问题的重要数据源,内存快照中保存了进程虚拟机的完整的堆内存数据,很多时候也是调查其他类型异常的重要参考。但是dump出来的堆转储文件.hprof往往很大,以 LargeHeap 应用为例,其 OOM 时的内存快照大小通常在512M左右,要有效的存储和获取都是一个问题。 线下拿到hprof文件相对容易,也可以预防OOM,但覆盖的场景十分有

特征值分解(EVD)和奇异值分解(SVD)—应用于图片压缩

特征值分解(EVD)和奇异值分解(SVD)—应用于图片压缩 目录 前言 一、特征值分解 二、应用特征值分解对图片进行压缩 三、矩阵的奇异值分解 四、应用奇异值分解对图片进行压缩 五、MATLAB仿真代码 前言         学习了特征值分解和奇异值分解相关知识,发现其可以用于图片压缩,但网上没有找到相应代码,本文在学习了之后编写出了图片压缩的代码,发现奇异值分

Oracle高级压缩和透明数据加密组合实验

本文参考了实验DB Security - Advanced Compression with Transparent Data Encryption(TDE),其申请地址在这里。 本文只使用了实验中关于高级压缩和在线重定义的部分。并对要点进行说明及对实验进行了简化。 准备:环境设置 原文中的实验环境实际上是改自Oracle示例Sample Schema,其实唯一的改动就是去掉了SALES表中

Apache Hudi 架构设计和基本概念

点击上方蓝色字体,选择“设为星标” 回复”资源“获取更多资源 大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 暴走大数据 点击右侧关注,暴走大数据! Apache Hudi是一个Data Lakes的开源方案,Hudi是Hadoop Updates and Incrementals的简写,它是由Uber开发并开源的Data Lakes解决方案。Hudi具有如下基本特性/能力

「Apache Hudi系列」核心概念与架构设计总结

点击上方蓝色字体,选择“设为星标” 回复”面试“获取更多惊喜 简介 Apache Hudi依赖 HDFS 做底层的存储,所以可以支撑非常大规模的数据存储。同时基于下面两个原语,Hudi可以解决流批一体的存储问题。 提供了在hadoop兼容的存储之上存储大量数据,同时它还提供两种原语: Update/Delete 记录:Hudi 支持更新/删除记录,使用文件/记录级别索引,同时对写操作提供事务保

hadoop平台gz、lzo压缩对比

压缩比: rcfile:             1.04 rcfile+snappy:      0.27 rcfile+lzo:         0.25 sequencefile:       0.83 sequencefile+snappy:0.84 sequencefile+lzo:   0.79 单列读取速度: select count(distinct product_no) rc

图片识别 中图片压缩和放大算法,最近邻插值,双线性插值

由于在神经网络中,输入的张量大小必须相同,但是图片大小不一定相同,我们需要对图片进行压缩和放大。     图像的缩放很好理解,就是图像的放大和缩小。传统的绘画工具中,有一种叫做“放大尺”的绘画工具,画家常用它来放大图画。当然,在计算机上,我们不 再需要用放大尺去放大或缩小图像了,把这个工作交给程序来完成就可以了。下面就来讲讲计算机怎么来放大缩小图象;在本文中,我们所说的图像都是指点阵图, 也