目录

  • 1. Table Types
    • 1.1 Copy On Write
    • 1.2 Merge On Read
    • 1.3 Copy On Write对比Merge On Read
  • 2. Indexing
  • 3. Metadata Table

1. Table Types

1.1 Copy On Write

Copy-On-Write表的file slice只有一个base file,每一次action都会进行compaction,产生新version的file slice

说明:

  • field1、field2、field3在10:05的数据全部在base file中
  • 此时query能查询到version 10:05的数据
  • 10:10的upsert操作被compaction到field1、field2、field5,产生新version的base file
  • 此时query能查询到version 10:05和10:10的数据

1.2 Merge On Read

Merge on read表是copy on write表的超集。commit的数据首先被储存在log files中,然后会进行后台的compaction,将base file + log files合并,生成一个新version的base file。读取能达到近实时,可能有几分钟的延迟,有3种数据读取方式:

  1. Snapshot Queries:读取某个instant time的Snapshot,包含base file + log files。读取的数据延时低,查询性能低
  2. Incremental Queries:读取某个instant time后的增量数据,包含base file + log files
  3. Read Optimized Queries:读取某个instant time的Snapshot,只读取base file。读取的数据延时高,查询性能高

1.3 Copy On Write对比Merge On Read

对比点 CopyOnWrite MergeOnRead
写入延迟 Higher Lower
query延迟 Lower Higher
Update cost(I/O) Higher,rewrite整个parquet文件 Lower,append数据到delta log
Parquet File Size Smaller Larger
Write Amplification Higher Lower(取决于compaction strategy)
查询方式 Snapshot Queries + Incremental Queries Snapshot Queries + Incremental Queries + Read Optimized Queries

2. Indexing

每一个file group对应表的一个primary key。Hudi将partition + primary key作为hoodie key,映射到一个file group

Hudi支持以下几种Index类型,可以通过hoodie.index.type参数(BLOOM / HBASE / INMEMORY)进行指定:

  • Bloom Index(default):

    • 对record key使用bloom filters。如果构造的record key是event_time + event_id这种顺序key,布隆过滤器还可以进行范围过滤。
    • Hudi支持动态布隆过滤器(使用hoodie.bloom.index.filter.type=DYNAMIC_V0启用),它根据存储在给定文件中的记录数自动调整配置以改善误报率
    • 适用于update / delete的数据影响少部分partition
  • Simple Index:
    • 将表中的字段解析成key,和update/delete record进行join
    • 适用于update / delete的数据影响大部分partition
  • HBase Index: 将Index mapping储存在Hbase中
  • Bring your own implementation: 可以继承API实现自定义的indexing

Index有全局索引和非全局索引

  • 全局索引:

    • primay key只会存在一个partition中,hoodie key就是primary key
    • 会随着表的数据越多,性能越慢
    • update/delete的数据等于该primary key,但不属于该partition,会造成数据错误问题。所以需要我们保证primary key只能属于一个partition
    • 对于user_id为primary key,home_city为partition,会发生home_city变化的情况,这样partition path就会发生变化。需要设置hoodie.bloom.index.update.partition.path=true / hoodie.simple.index.update.partition.path=true
    • Hbase索引是全局索引
  • 非全局索引:
    • primary key可能存在多个partition中
    • 布隆索引和Simple Index默认是非全局索引,可以通过hoodie.index.type=GLOBAL_BLOOM / hoodie.index.type=GLOBAL_SIMPLE进行指定

3. Metadata Table

文件listings和partitions信息直接通过metadata table查询获取,减少HDFS的访问,提升读写性能

当完成一次成功的数据写入之后,coordinator会先同步抽取文件listings、partiitons等信息写入metadata table,然后再写event log到timeline

Metadata Table默认是开启的,可以通过hoodie.metadata.enable进行设置

【数据湖Hudi的概念】Table Types、Indexing和Metadata Table相关推荐

  1. 【Hudi】数据湖Hudi核心概念与架构设计总结

    Hudi是现在非常热门的数据湖开源方案,非常适合于搭建一个数据湖平台. 有些人认为数据湖肯定与大数据技术体系完全不一样,是两个东西,甚至认为他俩没关系. 但是,你知道Hudi的全称叫啥么?就是&quo ...

  2. 从0到1搭建数据湖Hudi环境

    一.目标 前面一篇博文中已经详细讲解过数据湖Hudi相关的一些基本概念,想学习下的,可以去看下.数据湖基本概念--什么是数据湖,数据湖又能干什么?为什么是Hudi_一个数据小开发的博客-CSDN博客 ...

  3. Flink 版本数据湖(hudi)实时数仓---flinkcdc hudi kafak hive

    1.架构图 2.实现实例 2.1 通过flink cdc 的两张表 合并 成一张视图, 同时写入到数据湖(hudi) 中 同时写入到kafka 中 2.2 实现思路 1.在flinksql 中创建fl ...

  4. 数据湖-hudi概述

    前言 数据湖是目前比较热的一个概念,许多企业都在构建或者计划构建自己的数据湖. 数据湖是一个集中式存储库,允许您以任意规模存储所有结构化和非结构化数据.您可以按原样存储数据(无需先对数据进行结构化处理 ...

  5. 数据湖基本概念--什么是数据湖,数据湖又能干什么?为什么是Hudi

    一.什么是数据湖 对于经常跟数据打交道的同学,初步听到数据湖这个概念的时候,肯定有点懵,但是相信大家对于数据仓库 这个概念并不陌生. 到了20世纪80年代以后,基于关系型数据库的事务处理成为了企业IT ...

  6. 震惊!这篇文章解读数据仓库、数据湖、数据中台等概念,竟然写了4万字!

    点击上方 "zhisheng"关注, 星标或置顶一起成长 Flink 从入门到精通 系列文章 如今,随着诸如互联网以及物联网等技术的不断发展,越来越多的数据被生产出来-据统计,每天 ...

  7. 4万字 全面解读数据中台、数据仓库、数据湖等概念!建议收藏!

    作者丨修鹏李 建议阅读需50分钟 如今,随着诸如互联网以及物联网等技术的不断发展,越来越多的数据被生产出来-据统计,每天大约有超过2.5亿亿字节的各种各样数据产生.这些数据需要被存储起来并且能够被方便 ...

  8. 数据湖架构Hudi(五)Hudi集成Flink案例详解

    五.Hudi集成Flink案例详解 5.1 hudi集成flink flink的下载地址: https://archive.apache.org/dist/flink/ Hudi Supported ...

  9. 百信银行基于 Apache Hudi 实时数据湖演进方案

    简介:本文介绍了百信银行实时计算平台的建设情况,实时数据湖构建在 Hudi 上的方案和实践方法,以及实时计算平台集成 Hudi 和使用 Hudi 的方式. 本文介绍了百信银行实时计算平台的建设情况,实 ...

最新文章

  1. mysql模糊查询 % , _ ,[], [^] 的区别
  2. ERROR: No query specified(Mysql数据库报错)
  3. 安卓APP_ Fragment(4)—— Fragment + ViewPager2 模拟微信首页 (1)两者联动实现翻页
  4. 欢乐纪中某B组赛【2019.1.29】
  5. Flink 消息聚合处理方案
  6. 发送http和https请求工具类 Json封装数据
  7. 如何获取用户当前详细的地理位置
  8. oracle备份密码文件,[数据库]Oracle数据库备份dmp文件,使用cmd命令导入导出步骤,以及忘记Oracle密码_星空网...
  9. Sharding-JDBC水平分库(水平数据库分片测试)_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记011
  10. [error] eclipse编写spring等xml配置文件时只有部分提示,tx无提示
  11. 【汽车电子】嵌入式软件开发常用工具
  12. 一些BIM的相关概念
  13. GMF:OCL(Object Constraint Language)介绍
  14. iOS高级面试题及部分答案
  15. 【Hive】如何在 Hive 中创建外部表映射 Hbase 中已存在的表
  16. nodejs实现分解质因数的算法
  17. 万字拿下leetcode线性数据结构
  18. windows快捷键,选中鼠标所指以上或以下内容
  19. html基础笔记与html5代码展示
  20. 搭积木的诀窍(数学题)

热门文章

  1. Vscode怎么进行文件对比-Vscode文件对比的方法介绍
  2. 黑名单将公开 我国建立行贿犯罪档案查询系统
  3. 未知USB设备(设备描述符请求失败)是什么?
  4. 【优化求解】基于收敛因子和黄金正弦指引机制的蝴蝶优化算法求解单目标优化问题matlab代码(AGSABOA)
  5. Ubuntu18.04 ROS Melodic版本安装gazebo_ros_pkgs包
  6. Using setJavaScriptEnabled can introduce XSS vulnerabilities into you application
  7. 计算机管理中误删用户,win10管理员账户删除了怎么解决?
  8. RFID出入库管理是如何实施的
  9. The maximum number of tolerable server reconnection errors has been reached
  10. 计算机冯诺伊曼体系结构和哈佛体系结构区别和处理器性能评判标准