大数据hive表和iceberg表格式

iceberg:

https://iceberg.apache.org/
iceberg表,是一种面向大型分析数据集的开放表格式,旨在提供可扩展、高效、安全的数据存储和查询解决方案。它支持多种存储后端上的数据操作,并提供 ACID 事务、多版本控制和模式演化等特性,使数据管理和查询更加灵活便捷。Iceberg 可以屏蔽底层数据存储格式上的差异,向上提供统一的操作 API,使得不同的引擎可以通过其提供的 API 接入。
表格式(Table Format)可以理解为元数据以及数据文件的一种组织方式,处于计算框架(Flink,Spark…)之下,数据文件(orc, parquet)之上。这一点与Hive有点类似,hive也是基于HDFS存储、MR/SPARK计算引擎,将数据组织成一种表格式,提供Hive Sql对数据进行处理。如果我们的文件格式选择的是parquet,那么文件是以“.parquet”结尾,例如:

00000-0-root_20211212192602_8036d31b-9598-4e30-8e67-ce6c39f034da-job_1639237002345_0025-00001.parquet 就是一个数据文件。
在这里插入图片描述

Iceberg 设计为以快照(Snapshot)的形式来管理表的各个历史版本数据。每个快照中会列出表在某个时刻的所有数据文件列表。Data 文件存储在不同的 Manifest 文件中,Manifest 文件存储在一个 Manifest List 文件中,Manifest 文件可以在不同的 Manifest List 文件间共享,一个 Manifest List 文件代表一个快照。
 Manifest list 文件是元数据文件,其中存储的是 Manifest 文件的列表,每个 Manifest 文件占据一行。
 Manifest 文件是元数据文件,其中列出了组成某个快照的数据文件列表。每行都是每个数据文件的详细描述,包括数据文件的状态、文件路径、分区信息、列级别的统计信息(例如每列的最大最小值、空值数等)、文件的大小以及文件中数据的行数等信息。
 Data 文件是 Iceberg 表真实存储数据的文件,一般是在表的数据存储目录的 data 目录下。

Apache Iceberg表的特点主要包括:

开放的数据湖表格式:Iceberg是一种开放的数据湖表格式,可以在HDFS或对象存储上构建数据湖存储服务,与多种计算引擎如Spark、Flink、Hive和Presto等兼容 。

1.核心能力:Iceberg设计初衷是解决Hive数仓上云的问题,提供基于HDFS或对象存储的轻量级数据湖存储服务,支持ACID语义、行级数据变更、历史版本回溯、高效数据过滤、Schema变更、分区布局变更以及隐式分区 。

2.文件级别的元数据管理:Iceberg通过快照进行多版本控制,每个快照对应一组清单,清单再对应具体数据文件 。

3.数据文件不可变性:Iceberg数据文件一旦创建就不能被修改,而是通过追加新数据文件来增加新数据 。

4.表快照:Iceberg表快照是表在特定时间点的版本,每次修改都会生成新的快照,帮助实现版本控制和数据管理 。

5.清单列表:清单列表是数据文件的元数据信息列表,对数据查询、管理和优化等操作至关重要 。

6.Catalog管理:Catalog是管理表和数据的入口,负责存储表的元数据信息,并允许通过编程方式或CLI进行操作 。

7.ACID和MVCC:Iceberg提供了ACID语义和多版本并发控制,确保数据的一致性和可靠性 。

8.Schema和Partition Evolution:Iceberg支持灵活的表schema变更和分区方式变更,允许对表进行增加列、删除列、更新列等操作 。

hive

Hive就是一种数据仓库,可以将结构化的数据文件映射为数据库表,并提供简单的sql查询功能,可以将sql语句转化为mapreduce任务执行,底层由HDFS来提供数据的存储,说白了hive可以理解为一个将SQL转换为MapReduce的任务的工具,甚至更进一步可以说hive就是一个MapReduce的客户端。Hive本身并不提供数据的存储功能,它可以使已经存储的数据结构化。hive将数据映射成数据库和一张张表,库和表的元数据信息可以存在metastore上(hive metastore一般是关系型数据库)。 通过 SQL 轻松访问数据的工具,从而支持提取/转换/加载 (ETL)、报告和数据分析等数据仓库任务。一种将结构强加于各种数据格式的机制访问直接存储在 Apache HDFS或其他数据存储系统(例如 Apache HBase)中的文件。

hive常用的存储格式有五种,textfile、sequencefile、rcfile、orc、parquet。
Hive表的一些关键特点:

结构化数据存储:
Hive表用于存储结构化数据,数据以行和列的形式组织,类似于传统关系型数据库的表。
元数据存储:
Hive表的元数据(如表名、列名、数据类型、分区信息等)存储在Hive Metastore中,这是一个中心化的元数据存储库。
数据存储位置:
Hive表的数据实际存储在HDFS上,Hive表与底层文件系统的位置相关联。
分区和分桶:
Hive表支持分区(Partition)和分桶(Bucket),这有助于优化查询性能和数据管理。
数据类型:
Hive表支持多种数据类型,包括数值型、字符串型、日期型、复杂类型(如数组、结构、映射等)。
表属性:
Hive表可以设置各种属性,如存储格式(如TextFile、SequenceFile、ORC、Parquet等)、压缩选项等。
外部表和内部表:
Hive支持外部表(External Table)和内部表(Managed Table),外部表的存储不受Hive管理,而内部表的存储由Hive管理。
索引:
Hive表可以创建索引,以提高查询效率。
存储结构:
Hive表可以有不同的存储结构,如行存储或列存储。
查询语言:
Hive提供了自己的查询语言HiveQL,它是SQL的一种方言,用于查询和管理Hive表中的数据。
数据操作:
用户可以使用HiveQL执行常见的数据操作,如SELECT、INSERT、UPDATE、DELETE等。

对比

Iceberg提供了事务处理能力,支持ACID语义,确保数据的一致性和完整性。Hive在早期版本中对事务性的支持不够完善,尽管在Hive 3中引入了对ACID的支持,但Iceberg在设计上更倾向于事务性操作 。

大框架上,Iceberg的文件组织形式与Hive类似,都是HDFS的目录,在warehouse下以/db/table的形式组建结构。Iceberg 是一种适用于 HDFS 或者对象存储的表格式,把底层的 Parquet、ORC 等数据文件组织成一张表,向上层的 Spark,Flink 计算引擎提供表层面的语义,作用类似于 Hive Meta Store,但是和 Hive Meta Store 相比:

Iceberg 能避免 File Listing 的开销;

也能够提供更丰富的语义,包括 Schema 演进、快照、行级更新、 ACID 增量读等。

Iceberg是纯文件的,元数据也存储在HDFS上,并做到了文件级别的元数据组织。
在/db/table的目录结构下,有两个目录:metadata和data,用于存储元数据和数据。
 data下存储数据,比较单一,只有一类文件,默认以Parquet形式存储。
 metadata下存储元数据,分三层:metadata file、manifest list、manifest file。元数据目前有两个版本:V1Metadata、V2Metadata,创建table时带参数设置:

CREATE TABLE tl(id BIGINT) WITH ('format-version'='2')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/800250.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Django select_related()方法

select_related()的作用 select_related()是Django ORM(对象关系映射)中的一种查询优化方法,主要用于减少数据库查询次数,提高查询效率。当你在查询一个模型实例时,如果这个实例有ForeignKey关联到其他模型&#xff0…

uniapp:国家、省市区,4级联动

使用uview的Select 列选择器 选择器完成国家,省市区,4级联动 要求后台数据格式: list: [{label: 中国,value: 1,children: [{label: 河南省,value: 2,children: [{label: 郑州市,value: 3,children: [{label: 中原区,value: 4},{label: 郑东…

RocketMQ实现分布式事务

RocketMQ的分布式事务消息功能,在普通消息基础上,支持二阶段的提交。将二阶段提交和本地事务绑定,实现全局提交结果的一致性。 1、生产者将消息发送至RocketMQ服务端。 2、RocketMQ服务端将消息持久化成功之后,向生产者返回Ack确…

OpenCV开发笔记(七十八):在ubuntu上搭建opencv+python开发环境以及匹配识别Demo

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140435870 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

PHP恋爱话术微信小程序系统源码

💖恋爱高手的秘密武器!恋爱话术微信小程序,让情话信手拈来✨ 💭【开场白:恋爱路上的甜蜜助手】💭 还在为跟心仪的TA聊天时找不到话题而尴尬?或是担心自己说的每句话都显得那么“直男/女”&…

Python和C++行人轨迹预推算和空间机器人多传感融合双图算法模型

🎯要点 🎯双图神经网络模型:最大后验推理和线性纠错码解码器 | 🎯重复结构和过约束问题超图推理模型 | 🎯无向图模型变量概率计算、和积消息传播图结构计算、隐马尔可夫模型图结构计算、矩阵图结构计算、图结构学习 |…

mysql group_concat()函数、行转列函数

文章目录 一、group_concat函数1.1、语法1.2、示例1.2.1、查询所有姓名,并显示在一行1.2.2、单列合并,指定冒号分隔符1.2.3、单列合并,去重1.2.4、多列拼接合并1.2.5、多列拼接合并,列和列之间指定分隔符 在mysql的关联查询或子查…

安卓学习中遇到的问题【bug】

安卓学习中遇到的问题 1Gradle下载慢怎么办? Gradle下载慢怎么办? distributionUrlhttps://mirrors.cloud.tencent.com/gradle/gradle-7.5-bin.zip 2 Could not resolve all files for configuration ‘:classpath‘. > Could not resolv…

聊聊常见的分布式ID解决方案

highlight: xcode theme: vuepress 为什么要使用分布式ID? 随着 Web 开发技术的不断发展,单体的系统逐步走向分布式系统。在分布式系统中,使用分布式 ID(Distributed IDs)主要是为了在没有单点故障的情况下生成唯一标识符。这些唯一标识符在很…

Python 读取esxi上所有主机的设备信息

(主要是为了统计所有虚拟机的设备名称和所属主机) 代码: from pyVim import connect from pyVmomi import vim import ssldef get_vm_devices(vm):devices []try:if vm.config is not None and hasattr(vm.config, hardware) and hasattr(v…

AI安全系列——[第五空间 2022]AI(持续更新)

最近很长时间没有更新,其实一直在学习AI安全,我原以为学完深度学习之后再学AI安全会更加简单些,但是事实证明理论转实践还是挺困难的,但是请你一定要坚持下去,因为“不是所有的坚持都有结果,但总有一些坚持…

Mac电脑清理软件有哪些 MacBooster和CleanMyMac哪个好用 苹果电脑清理垃圾软件推荐 cleanmymac和柠檬清理

对于苹果电脑用户来说,‌选择合适的清理软件可以帮助优化电脑性能,‌释放存储空间,‌并确保系统安全。一款好用的苹果电脑清理软件,能让Mac系统保持良好的运行状态,避免系统和应用程序卡顿的产生。有关Mac电脑清理软件…

CSS-1_0 CSS和文档流

文章目录 CSS和文档流如何证明这个流的存在呢?流和display番外:inline-block 碎碎念 CSS和文档流 首先什么叫流呢? 通常来说,我们最终看到的网页是HTML文档中定义的各个元素挨个输出的结果,这种一个接一个输出的方式…

14_Shell重定向输入输出

14_Shell重定向输入输出 输出重定向:一般情况,输出是在终端直接显示,改变输出位置,改变到文件中,这就是输出重定向 输入重定向:一般情况,输入是读取用户终端输入,改变输入位置&#…

Java二十三种设计模式-建造者模式(4/23)

建造者模式:构建复杂对象的专家 引言 建造者模式(Builder Pattern)是一种创建型设计模式,用于创建一个复杂的对象,同时允许用户只通过指定复杂对象的类型和内容就能构建它们,它将对象的构建和表示分离&am…

Spring Boot 集成 RabbitMQ

依赖与配置 在 pom.xml 中引入 RabbitMQ 相关依赖 <!-- AMQP 依赖, RabbitMq --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId><version>3.2.7</version> &…

详解注意力机制上篇【RNN,Seq2Seq(Encoder-Decoder,编码器-解码器)等基础知识】

NLP-大语言模型学习系列目录 一、注意力机制基础——RNN,Seq2Seq等基础知识 二、注意力机制【Self-Attention,自注意力模型】 &#x1f525; 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;理解和生成自然语言的能力对于构建智能系统至关重要。从文本分类、机器翻…

昇思25天学习打卡营第22天|基于MindSpore的红酒分类实验

基于MindSpore的红酒分类实验 K近邻算法实现红酒聚类 1、实验目的 了解KNN的基本概念&#xff1b;了解如何使用MindSpore进行KNN实验。 2、K近邻算法原理介绍 K近邻算法&#xff08;K-Nearest-Neighbor, KNN&#xff09;是一种用于分类和回归的非参数统计方法&#xff0c;…

WSL-Ubuntu20.04环境使用YOLOv8 TensorRT推理加速

在阅读本章内容之前&#xff0c;需要把部署环境以及训练环境都安装好。 1.TensorRTX下载 这里使用Wang-xinyu大佬维护的TensorRTX库来对YOLOv8进行推理加速的演示&#xff0c;顺便也验证一下前面环境配置的成果。 github地址&#xff1a;GitHub - wang-xinyu/tensorrtx&#x…

SourceTree rebase(变基)的使用

参考资料 【Sourcetree】コミットを一つにまとめる【Sourcetree】リベースする 目录 前提0.1 merge与rebase0.2 merge合并分支0.3 rebase合并分支0.4 &#x1f4a5;超级注意事项&#x1f4a5; 一. 代码已提交&#xff0c;未推送&#xff0c;交互式变基1.1 通过SourceTree操作1…