iceberg对比hive优势

2023-11-05

1.事务性

从事务性上来说,iceberg具有更高的数据质量。
因为iceberg本质是一种table format,屏蔽了底层的存储细节,写入数据时候需要严格按照schema写入。而hive可以先写入底层数据,然后使用load partition的方式来加载分区。这样就可能造成hive的实际存储数据与schema不一致。
另外,hive的分区数据生成以后,还可以直接删掉hdfs路径的文件(包括代码有bug无意中删除数据等),这样经常会存在分区数据不存在的场景。而iceberg基于快照提供了事务处理能力,使其实现了读写分离能力。iceberg在执行delete操作或者overwrite操作时,不会将原有的数据进行直接删除,而是新增了一个snapshot,在这个snapshot中引用新的数据文件,这样就实现了事务处理。

2.降低数据pipeline延时

hive针对数据进行update操作时,需要先将数据读取出来修改后再重新写,有极大的修正成本。Iceberg 所具有的修改、删除能力能够有效地降低开销,提升效率。
同时,传统数仓从数据ETL到数据入库入仓,流程一般较长,需要后续加入一些验证逻辑保证数据的准确性。因为流程长,架构也较为复杂,所以数据入库所需时间也较长。而iceberg的事务性设计可以保证流程的简易性,降低整个数据pipeline的延时。

3.对接不同计算引擎

iceberg 上层可以支持 Spark、Flink、Presto等多种计算引擎,当只需要进行离线批处理的时候,我们可以直接将iceberg当hive 表来使用,通过 Spark + iceberg 搭建原来的离线数据计算流。

当有实时指标计算的需求时,可以使用 flink 实时计算框架,来构建近实时数仓,而且iceberg 存储全量数据,且仍然有批计算能力,可以在流式计算作业运行的同时,跑一个批作业来进行数据回溯或者数据纠正。

4.小文件处理

在传统的实时数仓中,由于列式存储相对行式存储有较高的查询性能,我们一般采用parquet,orc等列存储数据格式。但是这种列式格式无法追加,流式数据又无法等候太长时间等到文件够了一个hdfs block块大小再写入。所以不可避免的产生了一个令人头大的问题,即小文件问题。大量小文件会对namenode造成巨大的压力,极大影响hdfs服务的稳定与性能,因此如何解决小文件问题也是传统的hive数仓面临的一个重要课题。

传统的流式数据入库的过程中对小文件进行合并会产生很多问题,比如流式数据不断的往hive表进行写入,如果同时有一个合并程序进行小文件的合并,那么这时候对同一份数据进行读写。会不会产生问题。如何保证事务,出错了怎么回滚呢,这些都是很棘手的问题。

而在iceberg中,提供了相应的API来进行小文件合并。

SparkActions.get(spark).rewriteDataFiles(icebergTable).execute()

5.统一接入数据源

通过iceberg 数据湖方案构建的近实时数仓可以将基于hive 的离线数仓和基于kafka等消息队列构建的实时数仓进行统一。你可以将日志数据、changeLog数据统一存储在iceberg 中,通过 iceberg 构建数仓只需要维护一套存储,甚至是一套计算链路。
同时 iceberg 还具有很好的开放性。得益于 spark 和 flink 的丰富的生态,可以将 MySQL Binlog数据、日志数据导入到 Iceberg 进行分析,也可以将 Iceberg 中的数据导入到 Hive、Doris等其他存储中进行分析。将一份数据导入 Iceberg,你永远不用担心在使用数据的时候取不出来。

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

iceberg对比hive优势 的相关文章

随机推荐

  • Java异常处理——断言

    小结 断言是一种调试方式 断言失败会抛出AssertionError 只能在开发和测试阶段启用断言 对可恢复的错误不能使用断言 而应该抛出异常 断言很少被使用 更好的方法是编写单元测试 断言 Assertion 是一种调试程序的方式 在Ja
  • vue中使用vue-quill-editor富文本编辑器,自定义toolbar修改工具栏options

    最近项目中要使用富文本编辑器 于是想到了vue quill editor 网上调查了一下 做一下笔记 效果图 安装组件 npm install vue quill editor 封装 v editor 组件
  • 图匹配算法

    目录 1 子图同构算法实现图的匹配 2 利用点构建无向图 1 子图同构算法实现图的匹配 给你两个点集 如何判断两个点集是不是相同的 可以利用子图同构算法进行匹配 程序如下 coding utf 8 Created on Thu Jun 1
  • JAVA HttpClient发送消息

    1 定义Http param消息体 import lombok Builder import lombok Data Data Builder public class Req private String id private JSONO
  • windows系统下通过优盘安装Ubuntu系统

    本文写的是ubuntu14 04 但其它升级版本如16 04等都是可以的 与通过软件 EasyBCD 安装方法相比 windos系统下通过EasyBCD安装ubuntu14 04 优盘安装更加简单 且安装优盘一旦制作好之后 可以多次使用 给
  • 深度医疗(2) - 基于深度学习乳腺癌诊断识别

    深度医疗是笔者基于深度学习的医学项目应用开发实践 经过整理输出了文档和本系列课程 希望通过分享可以和大家共同讨论 相互学习 探索更好的解决方案 笔者是一名普通的大数据和人工智能领域从业者 过程中如有错误和理解不到位的地方请广大同仁不吝赐教
  • 只需五步 集成新版 Elasticsearch7.9 中文搜索 到你的 Laravel7 项目

    只需五步骤 启动 集成ik中文分词插件的Elasticsearch7 9 Docker镜像 Laravel7 配置 Scout 配置 Model模型 导入数据 搜索 演示地址 https www ar414 com search query
  • ElasticSearch学习笔记

    ElasticSearch学习笔记 官网地址 https www elastic co products elasticsearch 官方中文文档地址 https www elastic co guide cn elasticsearch
  • ?101 Redraiment的走法【梅花桩】【最长上升子序列】

    题目描述 题目描述 Redraiment是走梅花桩的高手 Redraiment总是起点不限 从前到后 往高的桩子走 但走的步数最多 不知道为什么 你能替Redraiment研究他最多走的步数吗 样例输入 6 2 5 1 5 4 5 样例输出
  • UniApp组件封装

    什么是UniApp组件 UniApp是一个跨平台的开发框架 允许开发者使用Vue js编写一次代码 然后将其发布到多个平台 包括iOS Android和Web 在UniApp中 组件是构建用户界面的基本单元 它们可以重复使用 并且具有可配置
  • maven编译的时候报错 expected http 101 response but was 500

    暗示着在与某个服务器进行通信时出现了问题 HTTP 101 是一个协议状态码 表示服务器正在切换协议 而 HTTP 500 是服务器内部错误的状态码 表示服务器在处理请求时遇到了问题 这种情况下 有几种可能的原因和解决方法 网络连接问题 请
  • Java项目:企业人事管理系统(java+SSM+jsp+mysql+maven)

    源码获取 博客首页 资源 里下载 一 项目简述 功能介绍 员工管理 用户管理 部门管理 文档管理 职位管理等等 二 项目运行 环境配置 Jdk1 8 Tomcat8 5 mysql Eclispe IntelliJ IDEA Eclispe
  • Servlet过滤器实现网站访问计数器功能

    实现网站在线访问计数器功能 网站的初始值设置为1000 1 创建CountFilter的类 实现javax servlet Filter接口 是一个过滤器对象 通过过滤器实现统计网站人数功能 1 2 3 4 5 6
  • Java中的四种引用

    Java中存在四种引用 它们分别是 1 强引用 StrongReference 强引用是使用最普遍的引用 如果一个对象具有强引用 那垃圾回收器绝不会回收它 当内存空间不足 Java虚拟机宁愿抛出OutOfMemoryError错误 使程序异
  • Ubuntu临时和永久修改ip地址掩码和网关

    在终端修改指定网卡的ip地址 有临时修改和永久修改 查看网卡信息 终端输入 ifcofig 并回车 查看需要修改的网卡名称 临时修改 当重启电脑后 ip地址将恢复为原来的ip地址 此方法适合临时测试使用 1 修改ip和子网掩码 sudo i
  • 安装docker 17.03.2.ce教程

    系统 root master wayne cat etc redhat release CentOS Linux release 7 5 1804 Core 安装步骤 安装 yum config manager yum y install
  • 【Swagger2】标准写法及例子

    ApiModel 和 ApiModelProperty 含义 ApiModel description 用在 JavaBean 类上 说明 JavaBean 的 用途 ApiModelProperty value 用在 JavaBean 类
  • php保存tsv格式,PHP header发送各种类型文件及设置文件上载名

    PHP header发送各种类型文件及设置文件下载名 header Content type application image pjpeg 输出的类型 header Content Disposition attachment filen
  • Python类和对象

    什么是 Python 类 python 中的类是创建特定对象的蓝图 它使您可以以特定方式构建软件 问题来了 怎么办 类允许我们以一种易于重用的方式对我们的数据和函数进行逻辑分组 并在需要时进行构建 考虑下图 类变量是一个类的所有不同对象 实
  • iceberg对比hive优势

    1 事务性 从事务性上来说 iceberg具有更高的数据质量 因为iceberg本质是一种table format 屏蔽了底层的存储细节 写入数据时候需要严格按照schema写入 而hive可以先写入底层数据 然后使用load partit