我的编程空间,编程开发者的网络收藏夹
学习永远不晚

hudi clustering 数据聚集(一)

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

hudi clustering 数据聚集(一)

hudi clustering 数据聚集(一)

概要

数据湖的业务场景主要包括对数据库、日志、文件的分析,而管理数据湖有两点比较重要:写入的吞吐量和查询性能,这里主要说明以下问题:

    1、为了获得更好的写入吞吐量,通常把数据直接写入文件中,这种情况下会产生很多小的数据文件。虽然小文件的使用可以增加写入的并行度,且能够并行读取文件以提高读取速度,但会出现一个数据量很小,需要从多个小文件中读取数据,增加了很多IO。 

    2、数据按照进入数据湖的方式写入到文件中,在同一个文件上,数据局部性不是最佳的。 数据之间,与传入批次相关,相近的批次的数据会相关联,而不是与经常要查询的数据相关联。所以小文件的大小和缺乏数据局部性会降低查询性能。

   3、此外,许多文件系统(包括 hdfs),当有很多小文件时,性能会下降。

hudi clustering

hudi支持clustering功能,在不影响查询性能的情况下提高写入吞吐量。该功能可以以不同方式重写数据:

数据先写入小文件,在满足某些条件后(例如经过的时间、小文件数量、commit次数等),将小文件拼接成大文件。

通过对不同列上的数据进行排序,来更改磁盘上的数据布局,已提高数据间的相关性,可以提高查询性能。

实现

(用户可以将小文件的限制 hoodie.parquet.small.file.limit 配置为 0,这样可以强制将数据进入新的文件组。)

cow表的timeline

在上面的示例流程图中,显示了随时间(t5 到 t9)的分区状态。 主要有以下步骤:

  1. 在 t5,表中的一个分区有 5 个文件组 f0、f1、f2、f3、f4,分别在 t0、t1、t2、t3、t4时刻被创建。 假设每个文件组为 100MB。 所以分区中的总数据为 500MB。
  2. 在 t6 请求 clustering 操作。 与压缩类似,我们在带有“ClusteringPlan”的元数据中创建了一个“t6.clustering.requested”文件,其中包含跨所有分区的集群操作涉及的所有文件组。例如:{ partitionPath: {“datestr”}, oldfileGroups: [ {fileId: “f0”, time: “t0”}, { fileId: “f1”, time: “t1”}, ... ], newFileGroups: [“c1”, “c2”] }
  3. 假设clustering后的最大文件大小配置为 250MB。 集群会将分区中的所有数据重新分配到两个文件组中:c1、c2。 此时这些文件组是“虚假”的,在 t8 clustering 完成之前,对查询不可见。
  4. 请注意,文件组中的记录可以拆分为多个文件组。 在此示例中,来自 f4 文件组的一些记录同时转到了新文件组 c1、c2。
  5. 当集群正在进行时(t6 到 t8),任何涉及到这些文件组的更新插入都会被拒绝。
  6. 在写入新的数据文件 c1-t6.parquet 和 c2-t6.parquet 后,如果配置了全局索引,我们会在记录级索引中为所有具有新位置的键添加条目。 新的索引条目对其他写入将不可见,因为还没有关联的提交。
  7. 最后,我们创建一个提交元数据文件“t6.commit”,其中包含由此次提交修改的文件组(f0、f1、f2、f3、f4)。
  8. 注:文件组(f0 到 f4)不会立即从磁盘中删除。 cleaner 会在归档 t6.commit 之前清理这些文件。 并且,clustering 还会更新所有视图和源数据文件。

mor表的时间线

这种方法同样支持mor表,且过程与cow 表非常相似。

clustering 的为 parquet 格式文件。

Clustering 操作步骤

总体来说,需要两步:

  1. clustering 调度:创建 clustering 计划
  2. 执行 clustering:执行计划。创建新的文件,并替换旧的文件。

clustering 调度

  1. 识别符合集群条件的文件
    1. 过滤特定分区(根据配置优先考虑最新分区或旧分区)
    2. 任何大小 > targetFileSize 的文件都不符合条件
    3. 任何有待定压缩/clustering计划的文件都不符合条件
    4. 任何具有日志文件的文件组都不符合集群条件(该限制以后可能会被取消)
  2. 根据特定条件对符合聚类条件的文件进行分组。 每个组的数据大小预计是“targetFileSize”的倍数。 分组是作为计划中定义的“策略”的一部分完成的:
    1. 根据记录键范围对文件进行分组。因为键值范围存储在parquet footer中,这个可用于某些查询/更新。
    2. 根据提交时间对文件进行分组。
    3. 对自定义列,且具有重叠值的文件进行分组(指定列进行排序)
    4. 分组随机文件
    5. 我们可以限制组大小以提高并行性
  3. 根据特定条件过滤组(类似于 CompactionStrategy 中的 orderAndFilter)
  4. 最后,clustering计划被保存到timeline中。

执行 clustering

  1. 读取clustering计划,查看“clusteringGroups”的数量(用于并行性)。
  2. 创建 inflight状态的 clustering 文件
  3. 对于每组:
    1. 使用 strategyParams 实例化适当的策略类(例如:sortColumns)
    2. 策略类定义了分区器,我们可以用它来创建桶并写入数据。
  4. 创建 replacecommit:
    1. operationType 设置为“clustering”。
    2. 扩展元数据,并存储附加字段以跟踪重要信息(策略类可以返回这些额外的元数据信息)
      1. 用于合并文件的策略
      2. 跟踪替换文件

【参考】

https://hudi.apache.org/docs/next/configurations/#hoodieclusteringplanstrategyclass

https://cwiki.apache.org/confluence/display/HUDI/RFC+-+19+Clustering+data+for+freshness+and+query+performance

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

hudi clustering 数据聚集(一)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

hudi clustering 数据聚集(一)

概要数据湖的业务场景主要包括对数据库、日志、文件的分析,而管理数据湖有两点比较重要:写入的吞吐量和查询性能,这里主要说明以下问题: 1、为了获得更好的写入吞吐量,通常把数据直接写入文件中,这种情况下会产生很多小的数据文件。虽然小文件的使用可以增加写入的并
hudi clustering 数据聚集(一)
2018-12-12

hudi clustering 数据聚集(二)

小文件合并解析执行代码:import org.apache.hudi.QuickstartUtils._import scala.collection.JavaConversions._import org.apache.spark.sql.SaveMode.
hudi clustering 数据聚集(二)
2017-02-06

聚合,将一个集合中的数据插入到另一个集合中

php小编柚子在这篇文章中将为大家介绍一个常见的操作——聚合,即将一个集合中的数据插入到另一个集合中。聚合操作在编程中非常常见,可以用于合并数据、去重、筛选等多种场景。通过聚合操作,我们可以轻松地对数据进行处理和管理,提高代码的效率和可读性
聚合,将一个集合中的数据插入到另一个集合中
2024-02-11

Z-Order加速Hudi大规模数据集的方法

本篇内容介绍了“Z-Order加速Hudi大规模数据集的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 背景多维分析是大数据分析的一
2023-06-29

TensorFlow数据集(一)——数据

参考书《TensorFlow:实战Google深度学习框架》(第2版)例子:从一个张量创建一个数据集,遍历这个数据集,并对每个输入输出y = x^2 的值。#!/usr/bin/env python# -*- coding: UTF-8 -
2023-01-30

数据采集实战(一)-

概述最近在学习python的各种数据分析库,为了尝试各种库中各种分析算法的效果,陆陆续续爬取了一些真实的数据来。顺便也练习练习爬虫,踩了不少坑,后续将采集的经验逐步分享出来,希望能给后来者一些参考,也希望能够得到先驱者的指点!采集工具其实基本没用过什么现成的采
数据采集实战(一)-
2017-02-11

第02期:Prometheus 数据采集(一)

上篇文章(第01期:详解 Prometheus 专栏开篇)介绍了 Prometheus 的架构,本文开始将介绍 Prometheus 数据采集。本文首先会介绍采集数据的格式和分类,然后会给出一些使用上的建议。一、采集数据格式及分类1.1 采集数据的格式x`Pr
第02期:Prometheus 数据采集(一)
2022-04-30

MySQL Galera集群的数据一致性保证

MySQL Galera集群通过其独特的同步复制机制,确保了数据的一致性和高可用性。以下是关于MySQL Galera集群的数据一致性保证的详细信息:Galera集群的数据一致性保证机制基于认证的复制:Galera集群使用基于认证的复制机
MySQL Galera集群的数据一致性保证
2024-09-04

打造数据科学作品集:搭建一个数据科学博

这是「打造数据科学作品集」系列文章的第二篇。如果你喜欢该系列,而且想知道下一篇文章什么时候发布,你可以订阅我们。读完本文,你将学会如何使用 Pelican 静态网站生成器,搭建一个属于自己的博客,用来展示数据科学作品。全文大约 9500 字
2023-01-31

MySQL Galera集群如何提升数据一致性

MySQL Galera集群通过其独特的多主复制和同步复制机制,确保了数据的一致性,解决了传统MySQL主从复制中可能遇到的数据不一致问题。以下是MySQL Galera集群提升数据一致性的主要方式:多主复制架构:Galera集群采用多主复
MySQL Galera集群如何提升数据一致性
2024-09-04

编程热搜

目录