首页 > 其他分享 >3分钟了解Hudi数据表类型——COW和MOR

3分钟了解Hudi数据表类型——COW和MOR

时间:2023-04-21 23:02:05浏览次数:32  
标签:Hudi 读取 COW 数据表 MRO 内存 数据

COW(Copy-On-Write)MRO(Merge-On-Read)是 Hudi 中两种不同类型的表,它们的主要区别在于读写操作的性能以及内存占用。

1. COW(Copy-On-Write)

COW 表是在写入操作时进行复制的表,每次写入操作都会创建一个新的 COW 表,并将原表覆盖。COW 表的主要优点是可以减少内存占用和提高写入性能。由于每次写入操作都会创建一个新的COW 表,因此COW表适用于频繁进行写入操作的场景,例如批量更新、数据批量插入等。COW表的缺点是需要额外的内存管理能力,需要进行内存管理和回收。

image.png

1.1 COW 表的原理

COW 表是一种数据复制技术,其主要思想是在内存中创建一个新的副本,并将原对象和副本进行关联。当用户对副本进行修改时,原对象会被更新以反映副本的修改。当用户释放对象时,内存中的对象会被销毁,而内存空间可以被重新使用。

在 Hudi 中,COW 表是在写入操作时创建一个新的 COW 表,并将原表覆盖。新的 COW 表会保存在内存中,而原表会被释放。当用户读取数据时,Hudi 会查找原表是否还在内存中,如果在,则直接读取原表;如果不在,则需要读取新的 COW 表,并将其与原表进行关联。在COW表中,只有数据文件/基本文件(.parquet),没有增量日志文件(.log.*)。对每一个新批次写入都将创建相应数据文件的新版本(新的FileSlice),新版本文件包括旧版本文件的记录以及来自传入批次的记录(全量最新)。

1.2 COW 表的优缺点

COW 表具有以下优点:

  • 减少内存占用:每次写操作都会创建一个新的 COW表,而不是直接修改原来的表,因此可以减少内存占用,提高系统的性能。
  • 提高可扩展性:COW 表可以动态创建和销毁,可以根据实际需要动态调整表的大小,从而提高系统的可扩展性。
  • 适合频繁写操作:COW 表适用于对表进行频繁的写操作,因为每次写操作都会创建一个新的COW表,可以避免内存溢出和竞争问题,从而提高系统的性能和可扩展性。

COW 表也具有以下缺点:

  • 降低读取性能:COW表是在写入操作时创建的,因此在读取数据时,需要先查找新的 COW表,然后再与原表进行关联,会降低读取性能。
  • 需要内存管理:COW 表需要在内存中管理原表和COW表之间的关系,因此需要额外的内存管理能力,需要进行内存管理和回收。

1.3 在 Hudi 中的应用

Hudi 表是一种基于内存的数据存储系统,用于快速读取和写入大量数据。COW表在Hudi表中得到了广泛的应用,尤其是在需要频繁进行写操作的场景中。

例如,在需要对大量数据进行批量更新的场景下,可以使用 Hudi中的 COW表来减少内存占用和提高效率。在批量更新时,Hudi会创建一个新的 COW表,并将原表覆盖。新的 COW 表可以用来存储更新后的数据,而原表可以被释放,从而减少内存占用和提高性能。

此外,COW表还可以用于 Hudi 中的索引结构。由于索引通常是读取频率较高的数据,因此使用COW表可以减少索引的内存占用,提高索引的性能和可扩展性。在 Hudi中,可以使用 COW 表来创建动态索引,以适应不断变化的数据需求。

总的来说,COW表是 Hudi 中一种非常有用的数据复制技术,可以用于减少内存占用、提高性能和可扩展性等方面。在实际应用中,可以根据具体场景选择合适的 COW表类型,以实现更好的性能和可扩展性。

2. COW(Copy-On-Write)

MRO 表是在读取操作时进行合并的表,每次读取操作都会将新的数据合并到已有的表中,而不是直接替换已有的数据。MRO表的主要优点是可以提高读取性能和可扩展性。由于每次读取操作都会将新的数据合并到已有的表中,因此 MRO表适用于频繁进行读取操作的场景,例如数据查询、数据批量读取等。MRO表的缺点是需要额外的内存管理能力,需要进行内存管理和回收。

image.png

2.1 原理

MRO(Merge-On-Read)是一种数据合并技术,它在读取数据时进行数据合并。具体来说,当读取某个表时,Hudi 会先读取多个版本的数据,然后对这些版本进行合并,得出最新的数据。在数据合并的过程中,Hudi 会根据数据版本的时间戳、数据模型和操作方式等因素,采取不同的合并策略。例如,对于一些数据冲突,Hudi可以使用And/Or 策略进行解决,对于一些数据缺失,Hudi 可以使用求和策略进行填充。MOR表中,包含列存的基本文件(.parquet)和行存的增量日志文件(基于行的avro格式,.log.*)。顾名思义,MOR表的合并成本在读取端。因此在写入期间我们不会合并或创建较新的数据文件版本。标记/索引完成后,对于具有要更新记录的现有数据文件,Hudi创建增量日志文件并适当命名它们,以便它们都属于一个文件组。

2.2 优缺点

MRO具有以下优点:

  • 提高数据处理的效率和鲁棒性。MRO 可以在读取数据时进行数据合并,从而减少数据的读取次数,提高数据处理的效率。此外,MRO还可以避免数据丢失和冲突无法解决等问题。

  • 适用于大规模数据处理场景。MRO 适用于大规模数据处理场景,因为它可以减少数据的读取次数和存储量,从而提高数据处理的效率和鲁棒性。

  • 提高数据的可靠性和完整性。MRO可以在读取数据时进行数据合并,从而避免数据丢失和冲突无法解决等问题,从而提高数据的可靠性和完整性。

MRO 也具有以下缺点:

  • 实现复杂度较高。MRO 需要在读取数据时进行数据合并,因此需要考虑到多个因素,如数据模型、操作方式、时间戳、内部版本等,从而实现复杂的数据合并算法,从而导致实现复杂度较高。

  • 冲突处理策略不同导致性能差异大。MRO中不同的冲突处理策略会导致性能差异很大,因此需要根据具体的场景和数据特点选择合适的冲突处理策略。

2.3 应用

MRO可以应用于多种场景,例如:

  • 大规模数据处理。MRO 可以用于大规模数据处理场景,例如数据仓库、商业智能等场景,从而提高数据处理的效率和鲁棒性。

  • 数据备份和恢复。MRO可以用于数据备份和恢复场景,例如数据库灾备等

Hudi 中,可以根据具体应用场景选择合适的表类型。对于频繁进行写入操作的场景,可以选择COW表;对于频繁进行读取操作的场景,可以选择MRO表。同时,Hudi还提供了动态表结构功能,可以根据实际需要动态调整表的大小和类型,以实现更好的性能和可扩展性。

标签:Hudi,读取,COW,数据表,MRO,内存,数据
From: https://blog.51cto.com/hiszm/6210906

相关文章

  • 将MySQL当中的数据表在PHP当中转换成数组并打印,为什么没有显示到网页上面呢?
    如果你已经成功将MySQL中的数据表转换成了PHP数组,并且没有在网页上看到输出,那么可能是因为你没有将数组中的数据正确地渲染到HTML代码中。以下是一个简单的示例代码,演示如何将PHP数组转换为HTML表格并输出到网页上:phpCopycode<?php//连接到MySQL数据库$servername="local......
  • 题解 P9130 【[USACO23FEB] Hungry Cow P】
    赛时开始一眼线段树分治,交了几发都T了,就意识到事情不对。后来想了想发现势能分析不能带撤销。。。后来加了一些不能改变复杂度假了的优化,没过之后就自闭跑路了。。。赛后听别人说了个楼房重建就明白怎么做了。首先,我们离线下来把\(a\)排序,去重(这样方便一点,不然权值线段树上......
  • 一千个需求如何快速排序?MoSCoW排序法用上了!【No.2】
    什么是MoSCoW排序法?莫斯科排序法是一种优先级排序法,用于管理需求、任务或功能列表。该方法可以帮助团队确定哪些需求、任务或功能是最重要的,并决定在特定时间段内是否需要完成它们。所以在对需求进行排序时,可以从以下维度考虑:能为业务目标产出高价值的需求优先做;节省时间、人......
  • Oracle审计篇 —— 审计数据表空间迁移及定期数据清理设置
    以下内容测试版本为oracle19c,其他版本可能会略有不同。最好是在创建数据库之后就进行设置,审计数据越多迁移会越麻烦,还可能影响业务。 编号需求项需求细节内容说明准备工作1检查是否打开审计showparameterauditaudit_trail为NONE则未开启2检查审计表现在所在表空间SELECTtable_......
  • 【专题】2022年中国制造业数字化转型研究报告PDF合集分享(附原数据表)
    报告链接:http://tecdat.cn/?p=32145原文出处:拓端数据公众号本文中所说的制造业数字化转型,指的是在制造企业的设计、生产、管理、销售及服务的每一个环节中,将新一代信息技术应用到制造企业的设计、生产、管理、销售及服务的每一个环节中,并可以以每一个环节中产生的数据为基础,展开......
  • 2012-2013 ACM-ICPC, NEERC, Moscow Subregional Contest题解
    题目链接:2012-2013ACM-ICPC,NEERC,MoscowSubregionalContestC.Cinderella(贪心)思路答案为大于平均值的数的数量代码#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);......
  • Lampiao靶场-dirtycow漏洞利用
    Lampiao靶场-dirtycow漏洞利用目录Lampiao靶场-dirtycow漏洞利用一、主机发现二、端口扫描三、目录遍历四、拿到webshell五、实现交互式shell六、暴力破解七、把dirtycow脚本传到靶机八、编译运行dirtycow脚本只是简单记录一下所用工具靶机信息:靶机:192.168.142.132攻击机:192.......
  • flask框架05 信号 flask-script命令 sqlalchemy创建操作数据表
    今日内容详细目录今日内容详细1信号1.1django信号2flask-script3sqlalchemy快速使用4sqlalchemy介绍和快速使用4.1sqlalchemy介绍和快速使用5创建操作数据表1信号#Flask框架中的信号基于blinker(安装这个模块),其主要就是让开发者可是在flask请求过程中定制一些用户行为......
  • 2022年中国服务机器人行业研究|报告PDF分享(附原数据表)
    报告链接:http://tecdat.cn/?p=31419随着大量企业的涌入,服务机器人产业化即将到来经过多年的发展,我国已经实现了完整的服务机器人产业生态系统。在常态化疫情防控、人口老龄化、技术进步和政策支持等多种因素的推动下,行业快速度过市场教育阶段。据统计,近三年我国服务机器人相关企......
  • 信号、flask-script、sqlalchemy 快速使用、sqlalchemy介绍和快速使用、创建操作数据
    目录1信号1.2django信号2flask-script3sqlalchemy快速使用4sqlalchemy介绍和快速使用4.1原生操作的快速使用5创建操作数据表1信号#Flask框架中的信号基于blinker(安装这个模块),其主要就是让开发者可是在flask请求过程中定制一些用户行为flask和django都有#观察者模......