热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【数据湖Hudi的概念】KeyGeneration和ConcurrencyControl

目录1.KeyGeneration1.1SimpleKeyGenerator1.2ComplexKeyGenerator1.3NonPartitionedKeyGenerator1

目录

  • 1. Key Generation
    • 1.1 SimpleKeyGenerator
    • 1.2 ComplexKeyGenerator
    • 1.3 NonPartitionedKeyGenerator
    • 1.4 CustomKeyGenerator
    • 1.5 TimestampBasedKeyGenerator
  • 2. Concurrency Control


1. Key Generation

Hudi提供了几种key generators,key generators的通用配置如下:

Config含义/目的
hoodie.datasource.write.recordkey.field数据的key字段,必须包含
hoodie.datasource.write.partitionpath.field数据的partition字段,必须包含
hoodie.datasource.write.keygenerator.classfull path的Key generator class,必须包含
hoodie.datasource.write.partitionpath.urlencode默认为false,如果为true,partition path将按url进行编码
hoodie.datasource.write.hive_style_partitioning默认为false,分区字段名称只有partition_field_value,如果为true,分区字段名称为:partition_field_name=partition_field_value

1.1 SimpleKeyGenerator

将一个列转换成string类型,作为分区字段名称

1.2 ComplexKeyGenerator

recordkey和partitionpath都将一个或多个字段作为key,多个字段逗号分隔。比如"Hoodie.datasource.write.recordkey.field" : "col1,col3"

1.3 NonPartitionedKeyGenerator

如果表不是分区表,使用NonPartitionedKeyGenerator,生成一个empty “” partiiton

1.4 CustomKeyGenerator

可以同时使用SimpleKeyGenerator、ComplexKeyGenerator、TimestampBasedKeyGenerator

  • 指定keygenerator.class

hoodie.datasource.write.keygenerator.class=org.apache.hudi.keygen.CustomKeyGenerator

  • 指定recordkey,可以是SimpleKeyGenerator或ComplexKeyGenerator

hoodie.datasource.write.recordkey.field=col1,col3

创建的record key格式为:col1:value1,col3:value3

  • 指定partitionpath,格式为:“field1:PartitionKeyType1,field2:PartitionKeyType2,…”,PartitionKeyType的可选值为simple、timestamp

hoodie.datasource.write.partitionpath.field=col2:simple,col4:timestamp

HDFS上创建的分区路径为:value2/value4

1.5 TimestampBasedKeyGenerator

这个key generator用于partition字段,需要设置的配置如下:

Config含义/目录
hoodie.deltastreamer.keygen.timebased.timestamp.typeUNIX_TIMESTAMP、DATE_STRING、MIXED、EPOCHMILLISECONDS、SCALAR
hoodie.deltastreamer.keygen.timebased.output.dateformat输出的date format
hoodie.deltastreamer.keygen.timebased.timezonedata format的Timezone
oodie.deltastreamer.keygen.timebased.input.dateformat输入的date format

下面是使用的一些例子

Timestamp is GMT

Config字段
hoodie.deltastreamer.keygen.timebased.timestamp.type“EPOCHMILLISECONDS”
hoodie.deltastreamer.keygen.timebased.output.dateformat“yyyy-MM-dd hh”
hoodie.deltastreamer.keygen.timebased.timezone“GMT+8:00”

输入字段值: “1578283932000L”,生成的Partition path: “2020-01-06 12”

如果输入字段值为null,生成的Partition path: “1970-01-01 08”

Timestamp is DATE_STRING

Config字段
hoodie.deltastreamer.keygen.timebased.timestamp.type“DATE_STRING”
hoodie.deltastreamer.keygen.timebased.output.dateformat“yyyy-MM-dd hh”
hoodie.deltastreamer.keygen.timebased.timezone“GMT+8:00”
hoodie.deltastreamer.keygen.timebased.input.dateformat“yyyy-MM-dd hh:mm:ss”

输入字段值: “2020-01-06 12:12:12”,生成的Partition path: “2020-01-06 12”

如果输入字段值为null,生成的Partition path: “1970-01-01 12:00:00”

Scalar examples

Config字段
hoodie.deltastreamer.keygen.timebased.timestamp.type“SCALAR”
hoodie.deltastreamer.keygen.timebased.output.dateformat“yyyy-MM-dd hh”
hoodie.deltastreamer.keygen.timebased.timezone“GMT”
hoodie.deltastreamer.keygen.timebased.timestamp.scalar.time.unit“days”
输入字段值: “20000L”,生成的Partition path: “2024-10-04 12”

如果输入字段值为null,生成的Partition path: “1970-01-02 12”

2. Concurrency Control

支持的方式:

  1. MVCC:Hudi的table service,如compaction、clean,利用MVCC在写入和读取之间提供snapshot isolation。可以实现单一写入和并发读
  2. OPTIMISTIC CONCURRENCY(experimental):实现并发写入,需要Zookeeper或HiveMetastore获取locks的支持。如write_A写入file1和file2,write_B写入file3和file4,则两个write写入成功;如write_A写入file1和file2,write_B写入file2和file3,则只能有一个write成功,另一个write失败

Multi Writer Guarantees

  • upsert: 表不会有重复数据
  • insert: 即使开启dedup,表也可能有重复数据
  • bulk_insert: 即使开启dedup,表也可能有重复数据
  • incremental pull: Data consumption和checkpoints可能会乱序

推荐阅读
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
  • 本文介绍了在使用Laravel和sqlsrv连接到SQL Server 2016时,如何在插入查询中使用输出子句,并返回所需的值。同时讨论了使用CreatedOn字段返回最近创建的行的解决方法以及使用Eloquent模型创建后,值正确插入数据库但没有返回uniqueidentifier字段的问题。最后给出了一个示例代码。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • oracle恢复失败,RMAN数据库恢复失败解决一例
    问题:这是一个从RAC环境的数据库的RAMN备份恢复到一个单机数据库的操作。当恢复数据文件和恢复正常,但在open数据库时出报下面的错误。--rman备 ... [详细]
  • 今天写一篇blog,已经多长时间没有更了,两个月了吧,没办法,现在银行开发,不能连外网,天天用虚拟机,真烦今天随手写点东西,主要是这两天对于springboot启动的分析,有所领悟 ... [详细]
  • ConsumerConfiguration在kafka0.9使用JavaConsumer替代了老版本的scalaConsumer。新版的配置如下:bootstrap. ... [详细]
author-avatar
asd54w464wq_212
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有