1、Apache Hudi简介

2023-10-30

1、Hudi简介

Hudi是Hadoop Updates and Incrementals的缩写,用于管理HDFS上的大型分析数据集存储,主要目的是高效的减少入库延时。

Hudi是一个开源Spark三方库,支持在Hadoop上执行upserts/insert/delete操作。

Hudi数据集通过自定义的InputFormat与当前的Hadoop生态系统(Hive、parquet、spark)集成,使该框架对最终用户来说是无缝的。

2、Hudi逻辑视图

读优化视图:在列式存储上提供出色的查询性能,非常像parquet表
增量视图:在数据集上提供一个变更流并提供给下游的作业和etl任务
准实时表:使用列存储和行存储以提供对实时数据的查询

3、Hudi存储引擎

Hudi将数据集组织到basePath下的分区目录中,类似与传统的hive表。数据集被分成分区,分区时包含该分区的数据文件的目录。每个分区由其相对于basepath的partitionpath唯一标识。在每个分区中,记录被分布到多个数据文件中。每个数据文件都由唯一的field和生成该文件的commit标识。对于更新,多个数据文件可以共享同一个field,但对应于不同的commit。

每条记录都由一个记录键(record key)唯一标识,并映射到一个field。一旦记录的第一个版本被写入文件,记录键和field之间的映射关系就永久不变。简而言之,field标识一组文件,而这些文件包含所有记录的所有版本数据。

Hudi的存储引擎由三个不同的部分组成:

Metadata: Hudi以时间轴的形式将数据集上的各项操作对应的元数据维护起来,从而支持数据集的即时视图,这部分元数据存储于根目录下的元数据目录中。

Commits :一个单独的 commit 包含对数据集之上一批数据的一次原子写入操作的相关信息。Commits 由单调递增的时间戳标识,表示写操作的开始;
Cleans:用于清除数据集中不再被查询所用到的旧版本文件的后台活动;
Compactions:协调 Hudi 中不同数据结构的后台活动,比如将基于行更新的文件转换成列式存储格式。

Index: Hudi维护了一个索引,以便在记录键已经存在的情况下快速地将传入的记录键映射到field,索引实现是可插拔的,以下是目前可用的选项:

BloomFilter:存储在每个数据文件的页脚中,默认就是用这个,因为不依赖任何外部系统。数据和索引始终保持一致。
HBase:可高效的查找一小批key,在索引标记期间,这个索引实现可能会快几秒

Data: Hudi以两种不同的存储格式存储所有摄入的数据。但实际使用的存储格式是可插拔的,但所选的存储格式需要以下特征:

扫描优化的列存储格式,默认是parquet
写优化的行格式,默认是avro

4、对比

Apache Hudi填补了在DFS上处理数据的巨大空白,并可以和这些技术很好地共存。然而, 通过将Hudi与一些相关系统进行对比,来了解Hudi如何适应当前的大数据生态系统,并知晓这些系统在设计中做的不同权衡仍将非常有用。

1、Kudu

Apache Kudu是一个与Hudi具有相似目标的存储系统,该系统通过对upserts支持来对PB级数据进行实时分析。 一个关键的区别是Kudu还试图充当OLTP工作负载的数据存储,而Hudi并不希望这样做。 因此,Kudu不支持增量拉取(截至2017年初),而Hudi支持以便进行增量处理。

Kudu与分布式文件系统抽象和HDFS完全不同,它自己的一组存储服务器通过RAFT相互通信。 与之不同的是,Hudi旨在与底层Hadoop兼容的文件系统(HDFS,S3或Ceph)一起使用,并且没有自己的存储服务器群,而是依靠Apache Spark来完成繁重的工作。 因此,Hudi可以像其他Spark作业一样轻松扩展,而Kudu则需要硬件和运营支持,特别是HBase或Vertica等数据存储系统。 到目前为止,我们还没有做任何直接的基准测试来比较Kudu和Hudi(鉴于RTTable正在进行中)。 但是,如果我们要使用CERN, 我们预期Hudi在摄取parquet上有更卓越的性能。

2、Hive事务

Hive事务/ACID是另一项类似的工作,它试图实现在ORC文件格式之上的存储读取时合并。 可以理解,此功能与Hive以及LLAP之类的其他工作紧密相关。 Hive事务不提供Hudi提供的读取优化存储选项或增量拉取。 在实现选择方面,Hudi充分利用了类似Spark的处理框架的功能,而Hive事务特性则在用户或Hive Metastore启动的Hive任务/查询的下实现。 根据我们的生产经验,与其他方法相比,将Hudi作为库嵌入到现有的Spark管道中要容易得多,并且操作不会太繁琐。 Hudi还设计用于与Presto/Spark等非Hive引擎合作,并计划引入除parquet以外的文件格式。

3、HBase

尽管HBase最终是OLTP工作负载的键值存储层,但由于与Hadoop的相似性,用户通常倾向于将HBase与分析相关联。 鉴于HBase经过严格的写优化,它支持开箱即用的亚秒级更新,Hive-on-HBase允许用户查询该数据。 但是,就分析工作负载的实际性能而言,Parquet/ORC之类的混合列式存储格式可以轻松击败HBase,因为这些工作负载主要是读取繁重的工作。 Hudi弥补了更快的数据与分析存储格式之间的差距。从运营的角度来看,与管理分析使用的HBase region服务器集群相比,为用户提供可更快给出数据的库更具可扩展性。 最终,HBase不像Hudi这样重点支持提交时间、增量拉取之类的增量处理原语。

4、流式处理

一个普遍的问题:”Hudi与流处理系统有何关系?”,我们将在这里尝试回答。简而言之,Hudi可以与当今的批处理(写时复制存储)和流处理(读时合并存储)作业集成,以将计算结果存储在Hadoop中。 对于Spark应用程序,这可以通过将Hudi库与Spark/Spark流式DAG直接集成来实现。在非Spark处理系统(例如Flink、Hive)情况下,可以在相应的系统中进行处理,然后通过Kafka主题/DFS中间文件将其发送到Hudi表中。从概念上讲,数据处理 管道仅由三个部分组成:输入,处理,输出,用户最终针对输出运行查询以便使用管道的结果。Hudi可以充当将数据存储在DFS上的输入或输出。Hudi在给定流处理管道上的适用性最终归结为你的查询在Presto/SparkSQL/Hive的适用性。

更高级的用例围绕增量处理的概念展开, 甚至在处理引擎内部也使用Hudi来加速典型的批处理管道。例如:Hudi可用作DAG内的状态存储(类似Flink使用的[rocksDB(https://ci.apache.org/projects/flink/flink-docs-release-1.2/ops/state_backends.html#the-rocksdbstatebackend))。 这是路线图上的一个项目并将最终以Beam Runner的形式呈现。

参考文献:

https://www.iteblog.com/archives/9660.html
http://hudi.apache.org/cn/comparison.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

1、Apache Hudi简介 的相关文章

  • LLM-项目详解-Chinese-LLaMA-AIpaca(一):LLM+LoRa微调加速技术原理及基于PEFT的动手实践:一些思考和mt0-large+lora完整案例

    如何花费较少的算力成本来进行微调训练 十分重要 当前关于LLaMA Alpaca Instruct微调 LoRa微调等多个概念大家讲的很多 最近也在学习 也看到几个有趣的话题 主要参考于 https github com ymcui Chi
  • CompletableFuture使用案例

    最近遇到一个前端接口需要批量请求接口 担心超时 所以使用批量异步的请求方式 批量构造请求 for ProductInfoParam productInfoParam list CompletableFuture
  • 实战分享:一文读懂RS-232总线

    大家好 我是阿荣 感恩遇见 本文部分图文来源于网络 并经过整合 编辑和勘误 实战分享栏目将重点介绍嵌入式的基础知识 并融合一些实战经验 持续勘误和迭代 建议关注和收藏 WX同名 RS 232概述 RS 232标准接口 又称EIARS 232
  • php的MVC模式

    php的MVC模式 model 存放向数据库请求来的数据 view 存放组件 图片 页面模板html文件 controller 获取或改变model里的数据返回给页面渲染数据 1 根目录入口php文件index php 在此定义目录常量方便
  • (三)Refactor

    在实现线程池上个版本中 提交任务需要重写Task run 方法 获取结果会被阻塞直至任务完成 使用C 异步新标准解决上述问题 提交任务期望有如下简洁格式 auto res1 pool submitTask func 1 2 可以使用C 17

随机推荐

  • c++ 小型公司人员管理 类的继承和派生实战

    写在前面 希望这篇文章能对大家有一点点帮助 欢迎一起交流进步 谢谢大家的阅读 一 题目 3 小型公司人员管理 某小型公司有四类人员 总经理 技术人员 销售经理 推销员 设计一个基类employee派生出 manager 总经理 techni
  • 读取多波段的tif(利用GDAL)

    bmp的格式是RGBRGB 排列下来的 每个像素的三个分量靠在一起 描述完一个像素 接着描述下一个像素 tif的格式更多样 通常的格式也是BGRBGR 次序与bmp相反 排列下来的 但偶尔有一些tif文件采用RRRRRR GGGGG BBB
  • 银行核心系统

    文章来源与某位大神的力作 写的非常好 科目的地方首位科目号有待商榷 但总之看完后很多东西一目了然 银行核心系统入门简介 本文的目标读者是准备从事银行核心系统开发 维护的从业人员 请注意 是 准备 换句话说 可以理解为一份对科技人员 尤其是对
  • 【SpringBoot】DEMO:上传头像并把头像的路径存放到数据库

    SpringBoot DEMO 上传头像并把头像的路径存放到数据库 一 任务介绍 二 目录结构 三 功能实现 四 实现效果 五 大功告成 一 任务介绍 判断图片是否为空 不为空 把图片上传到服务器 把图片的路径写入数据库 二 目录结构 三
  • Python中的列表部件QListWidget详解

    Python中的列表部件QListWidget详解 QListWidget是Qt框架中的一个常用部件 用于显示列表数据 在Python中 我们可以使用PyQt库来创建和操作QListWidget部件 本文将详细介绍QListWidget的使
  • Svg画图

    一 Svg是什么 SVG 指可伸缩矢量图形 SVG 用来定义用于网络的基于矢量的图形 SVG 使用 XML 格式定义图形 SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失 SVG 与诸如 DOM 和 XSL 之类的 W3C 标准是
  • 主频计算-架构真题(二十三)

    某文件系统采用多级索引结构 若磁块大小为4K字节 每个块号需占4个字节 那么采用二级索引结构时的文件最大长度可占用 个物理块 1 1024 2 1024 1024 3 2048 2048 4 4096 4096 答案 B 解析 磁盘大小 块
  • 超详细:通过neo4j构建数电知识图谱

    将neo4j gt 连接mysql CALL apoc load jdbc 创建节点 ranker代表课程id name代表该学科名称 create n course name 数字电路与逻辑设计 ranker 4 return n 建立课
  • Gazebo载入模型问题汇总

    问题1 载入模型的时候零件之间的关节断开 gazebo载入一个四足机器人模型的时候 发现它的有些关节断开了 如下图这种 身子还在中间躺着 但是机器人的大腿已经不知道被谁砍了下来 右上角哪个红色大腿非常明显 原因及解决办法 这里由于我的joi
  • Metric评价指标-Perplexity语言模型

    欢迎关注知乎 世界是我改变的 知乎上的原文链接 一 原理介绍 在研究生实习时候就做过语言模型的任务 当时让求PPL值 当时只是调包 不求甚解 哈哈哈 当时也没想到现在会开发这个评价指标 那现在我来讲一下我对这个指标的了解 望各位大佬多多指教
  • HyperLogLog-Redis中的基数统计算法

    1 基本概念 基数 cardinality 是指一个集合中不同元素的个数 例如集合 1 2 3 4 5 2 3 9 7 这个集合有9个元素 但是2和3各出现了两次 因此不重复的元素为1 2 3 4 5 9 7 所以这个集合的基数是7 Red
  • 过来人聊聊眼中的普通码农和技术大牛的区别

    最近几年 IT行业中的各个群里突然流行了一个词 大牛 有些人因为在学术界发了很多论文而被称之为牛 有些人因为在群里努力帮助大家解决问题而被称之为大牛 有些人因为写了一本技术的书而被称之为大牛 有些人因为开源了很多技术知识二被称之为大牛 还有
  • Executor框架及线程池总结

    概述 Executor作为一个灵活且强大的异步执行框架 其支持多种不同类型的任务执行策略 提供了一种标准的方法将任务的提交过程和执行过程进行了解耦开发 基于生产者和消费者模型 还提供了对生命周期的支持 以及统计信息收集 应用程序管理机制和性
  • Cocos2d-x的SprideMonkey的JavaScript与C++的交互(三) - 全局变量Obj的操作

    javascript c 交互 spidermonkey javascript c 交互 需求 全局变量Obj的操作 这个是作为JS脚本来说非常有用处的一个地方 比如说 咱们想在JS脚本中存下窗口位置和大小 还有其他杂七杂八的东西 对游戏或
  • java相关异常大全,持续更新~~~

    Java 异常 1 NullPointerException NullPointerException是Java中最常见的异常之一 通常在试图访问或操作一个null对象时引发 示例代码 String str null int length
  • 1004 成绩排名 (20 分) Java写法 读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

    读入 n gt 0 名学生的姓名 学号 成绩 分别输出成绩最高和成绩最低学生的姓名和学号 输入格式 每个测试输入包含 1 个测试用例 格式为 第 1 行 正整数 n 第 2 行 第 1 个学生的姓名 学号 成绩 第 3 行 第 2 个学生的
  • chorme唤起Java开发的本地程序全采坑记

    chorme唤起Java开发的本地程序全踩坑记 背景说明 在开发企业web应用时 往往需要进行订单通知 状态通知 或者需要一些插件式本地应用来扩展一些网页 实现不了的功能等 以通知为例 如果网页标签页或者浏览器切出去了 意味着网页内部的通知
  • 毕业设计-基于深度学习的网络流量异常检测系统

    目录 前言 课题背景和意义 实现技术思路 一 网络流量异常检测方法 二 基于 的物联网流量异常检测 三 实验 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费
  • docker 删除容器 找回容器内文件_如何管理 Docker 容器里的文件

    之前的文章里介绍了 Docker 的基本操作 再来水一篇文章说说怎么对容器里的文件进行管理 Docker 容器虽然类似虚拟机 但如果想要物理机和容器内系统进行文件传输时 还是有点区别的 如果只是单纯对容器内的系统进行本地文件管理的话 那么用
  • 1、Apache Hudi简介

    1 Hudi简介 Hudi是Hadoop Updates and Incrementals的缩写 用于管理HDFS上的大型分析数据集存储 主要目的是高效的减少入库延时 Hudi是一个开源Spark三方库 支持在Hadoop上执行upsert