返回顶部
首页 > 资讯 > 精选 >Apache Hudi灵活的Payload机制是什么
  • 464
分享到

Apache Hudi灵活的Payload机制是什么

2023-06-29 17:06:41 464人浏览 薄情痞子
摘要

本篇内容介绍了“Apache Hudi灵活的Payload机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.摘要Apac

本篇内容介绍了“Apache Hudi灵活的Payload机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1.摘要

Apache Hudi 的Payload是一种可扩展的数据处理机制,通过不同的Payload我们可以实现复杂场景的定制化数据写入方式,大大增加了数据处理的灵活性。Hudi Payload在写入和读取Hudi表时对数据进行去重、过滤、合并等操作的工具类,通过使用参数 "hoodie.datasource.write.payload.class"指定我们需要使用的Payload class。本文我们会深入探讨Hudi Payload的机制和不同Payload的区别及使用场景。

2. 为何需要Payload

在数据写入的时候,现有整行插入、整行覆盖的方式无法满足所有场景要求,写入的数据也会有一些定制化处理需求,因此需要有更加灵活的写入方式以及对写入数据进行一定的处理,Hudi提供的playload方式可以很好的解决该问题,例如可以解决写入时数据去重问题,针对部分字段进行更新等等。

3. Payload的作用机制

写入Hudi表时需要指定一个参数hoodie.datasource.write.precombine.field,这个字段也称为Precombine Key,Hudi Payload就是根据这个指定的字段来处理数据,它将每条数据都构建成一个Payload,因此数据间的比较就变成了Payload之间的比较。只需要根据业务需求实现Payload的比较方法,即可实现对数据的处理。

Hudi所有Payload都实现HoodieRecordPayload接口,下面列出了所有实现该接口的预置Payload类。

Apache Hudi灵活的Payload机制是什么

下图列举了HoodieRecordPayload接口需要实现的方法,这里有两个重要的方法preCombine和combineAndGetUpdateValue,下面我们对这两个方法进行分析。

Apache Hudi灵活的Payload机制是什么

3.1 preCombine分析

从下图可以看出,该方法比较当前数据和oldValue,然后返回一条记录。

Apache Hudi灵活的Payload机制是什么

从preCombine方法的注释描述也可以知道首先它在多条相同主键的数据同时写入Hudi时,用来进行数据去重。
调用位置

Apache Hudi灵活的Payload机制是什么

其实该方法还有另一个调用的地方,即在MOR表读取时会对Log file中的相同主键的数据进行处理。
如果同一条数据多次修改并写入了MOR表的Log文件,在读取时也会进行preCombine。

Apache Hudi灵活的Payload机制是什么

3.2 combineAndGetUpdateValue分析

该方法将currentValue(即现有parquet文件中的数据)与新数据进行对比,判断是否需要持久化新数据。

Apache Hudi灵活的Payload机制是什么

由于COW表和MOR表的读写原理差异,因此combineAndGetUpdateValue的调用在COW和MOR中也有所不同:

在COW写入时会将新写入的数据与Hudi表中存的currentValue进行比较,返回需要持久化的数据

在MOR读取时会将经过preCombine处理的Log中的数据与Parquet文件中的数据进行比较,返回需要持久化的数据

4.常用Payload处理逻辑的对比

了解了Payload的内核原理,下面我们对比分析下集中常用的Payload实现的方式。

4.1 OverwriteWithLatestAvroPayload

OverwriteWithLatestAvroPayload 的相关方法实现如下

Apache Hudi灵活的Payload机制是什么

可以看出使用OverwriteWithLatestAvroPayload 会根据orderingVal进行选择(这里的orderingVal即precombine key的值),而combineAndGetUpdateValue永远返回新数据。

4.2 OverwriteNonDefaultsWithLatestAvroPayload

OverwriteNonDefaultsWithLatestAvroPayload继承OverwriteWithLatestAvroPayload,preCombine方法相同,重写了combineAndGetUpdateValue方法,新数据会按字段跟schema中的default value进行比较,如果default value非null且与新数据中的值不同时,则在新数据中更新该字段。由于通常schema定义的default value都是null,在此场景下可以实现更新非null字段的功能,即如果一条数据有五个字段,使用此Payload更新三个字段时不会影响另外两个字段原来的值。

Apache Hudi灵活的Payload机制是什么

4.3 DefaultHoodieRecordPayload

DefaultHoodieRecordPayload同样继承OverwriteWithLatestAvroPayload重写了combineAndGetUpdateValue方法,通过下面代码可以看出该Payload使用precombine key对现有数据和新数据进行比较,判断是否要更新该条数据。

Apache Hudi灵活的Payload机制是什么

下面我们以COW表为例展示不同Payload读写结果测试

5. 测试

我们使用如下几条源数据,以key为主键,col3为preCombine key写Hudi表。

Apache Hudi灵活的Payload机制是什么

首先我们一次写入col0是'aa'、'bb'的两条数据,由于他们的主键相同,所以在precombine时会根据col3比较去重,最终写入Hudi表的只有一条数据。(注意如果写入方式是insert或bulk_insert则不会去重)

Apache Hudi灵活的Payload机制是什么

查询结果

Apache Hudi灵活的Payload机制是什么

下面我们使用col0是'cc'的数据进行更新,这是由于三种Payload的处理逻辑不同,最终写入的数据结果也不同。

OverwriteWithLatestAvroPayload完全用新数据覆盖了旧数据。

Apache Hudi灵活的Payload机制是什么

OverwriteNonDefaultsWithLatestAvroPayload由于更新数据中col1 col2为null,因此该字段未被更新。

Apache Hudi灵活的Payload机制是什么

DefaultHoodieRecordPayload由于cc的col3小于bb的,因此该数据未被更新。

Apache Hudi灵活的Payload机制是什么

6. 总结

通过上面分析我们清楚了Hudi常用的几种Payload机制,总结对比如下

Payload更新逻辑与适用场景
OverwriteWithLatestAvroPayload永远用新数据更新老数据全部字段,适合每次更新数据都是完整的
OverwriteNonDefaultsWithLatestAvroPayload将新数据中的非空字段更新到老数据中,适合每次更新数据只有部分字段
DefaultHoodieRecordPayload根据precombine key比较是否要更新数据,适合实时入湖且入湖顺序乱序

虽然Hudi提供了多个预置Payload,但是仍不能满足一些特殊场景的数据处理工作:例如用户在使用kafka-Hudi实时入湖,但是用户的一条数据的修改不在一条Kafka消息中,而是多条相同主键的数据消息到,第一条里面有col0,col1的数据,第二条有col2,col3的数据,第三条有col4的数据,这时使用Hudi自带的Payload就无法完成将这三条数据合并之后写入Hudi表的工作,要实现这个逻辑就要通过自定义Payload,重写Payload中的preCombine和combineAndGetUpdateValue方法来实现相应的业务逻辑,并在写入时通过hoodie.datasource.write.payload.class指定我们自定义的Payload实现

“Apache Hudi灵活的Payload机制是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Apache Hudi灵活的Payload机制是什么

本文链接: https://lsjlt.com/news/326027.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Apache Hudi灵活的Payload机制是什么
    本篇内容介绍了“Apache Hudi灵活的Payload机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.摘要Apac...
    99+
    2023-06-29
  • Apache Hudi灵活的Payload机制硬核解析
    1.摘要 Apache Hudi 的Payload是一种可扩展的数据处理机制,通过不同的Payload我们可以实现复杂场景的定制化数据写入方式,大大增加了数据处理的灵活性。Hudi ...
    99+
    2024-04-02
  • OnZoom基于Apache Hudi的一体架构是什么
    本篇内容主要讲解“OnZoom基于Apache Hudi的一体架构是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“OnZoom基于Apache Hudi的一体架构是什么”...
    99+
    2023-06-29
  • Apache Hudi内核文件标记机制的示例分析
    这篇文章主要介绍了Apache Hudi内核文件标记机制的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 摘要Hudi 支持在写入时自动清理未成功提交的...
    99+
    2023-06-29
  • Apache Mesos调度机制是什么
    本篇内容介绍了“Apache Mesos调度机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. ...
    99+
    2024-04-02
  • query string、formData和request payload的区别是什么
    这篇文章主要讲解了“query string、formData和request payload的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“qu...
    99+
    2024-04-02
  • 灵活性的Python编程语言是怎么样的
    灵活性的Python编程语言是怎么样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在了解Python编程语言之前,要理解下什么是Python编程语言?Cuido vanR...
    99+
    2023-06-17
  • Apache Dubbo的SPI机制是如何实现的
    目录一、SPI1.1 JDK自带SPI实现 1.2 Dubbo SPI 二、加载-ExtensionLoader 2.1 获取ExtensionLoader的实例 2.2 加载扩展类...
    99+
    2024-04-02
  • Java的SPI机制是什么
    本篇内容介绍了“Java的SPI机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!SPI的全名为Service Provider In...
    99+
    2023-06-17
  • Java的ClassLoader机制是什么
    本篇内容介绍了“Java的ClassLoader机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!JVM在加载类的时候,都是通过Cla...
    99+
    2023-06-17
  • MapReduce的Shuffle机制是什么
    这篇文章主要介绍“MapReduce的Shuffle机制是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MapReduce的Shuffle机制是什么”文章能帮助大家解决问题。Shuffle过程,...
    99+
    2023-06-27
  • Linux的Signal机制是什么
    这篇文章主要介绍了Linux的Signal机制是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux的Signal机制是什么文章都会有所收获,下面我们一起来看看吧。Signal机制在Linux中是一个非...
    99+
    2023-06-27
  • android的handler机制是什么
    Android中的Handler机制是一种用于处理消息和任务的机制。它主要用于在不同的线程之间进行通信和传递消息。在Android中...
    99+
    2023-08-11
    android
  • Golang的GC机制是什么
    这篇文章主要介绍“Golang的GC机制是什么”,在日常操作中,相信很多人在Golang的GC机制是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Golang的GC机制是什么”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-05
  • kafka的重试机制和ack机制是什么
    Kafka的重试机制是指在消息发送过程中,如果发送失败或者出现异常,Kafka会自动尝试重新发送消息。重试机制的目的是确保消息能够成...
    99+
    2023-10-26
    kafka
  • C++ 函数指针详解:灵活调用和回调机制的深入指南
    函数指针详解:函数指针允许将函数地址存储在变量中,实现函数的动态调用和回调机制。函数指针语法:returntype (*functionpointername)(parameterlis...
    99+
    2024-04-29
    c++ 函数指针 typedef
  • 什么是mysql的权限控制机制
    本文主要给大家介绍什么是mysql的权限控制机制,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下什么是mysql的权限控制机制吧。权限控制机制 &nb...
    99+
    2024-04-02
  • 计算机中主板的核心和灵魂是什么
    小编给大家分享一下计算机中主板的核心和灵魂是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!主板的核心和灵魂是:主板芯片组。主板芯片组是主板的核心组成部分,可以...
    99+
    2023-06-15
  • apache虚拟主机配置的方法是什么
    Apache虚拟主机配置的方法如下:1. 在Apache的配置文件中添加VirtualHost指令,如下所示:```ServerNa...
    99+
    2023-06-14
    apache虚拟主机 虚拟主机
  • apache关闭虚拟主机的方法是什么
    关闭虚拟主机的方法有以下几种:1. 编辑Apache配置文件:打开Apache的配置文件(一般为httpd.conf),找到对应虚拟...
    99+
    2023-09-07
    虚拟主机 apache
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作