Iceberg (一、presto和trino实践——行级更新)

Spark、Flink、Presto、Trino、Hudi、Iceberg、Doris、StarRocks 的简介及适用场景说明 本文介绍了大数据领域8种主流工具的定位与适用场景: 计算引擎:Spark适用于批处理、机器学习等通用场景;Flink专注低延迟流处理。 SQL查询引擎:Presto/Trino支持跨数据源交互式分析。 数据湖框架:Hudi支持实时更新,Iceberg规范表格式。 OLAP数据库:Doris/StarRocks用于高并发实时分析。 实际应用中常组合使用,如Flink+Hudi实现实时数据湖,Trino查询,StarRocks生成报表,形成完整数据链路。 阅读详情

iceberg介绍

关于iceberg的一些介绍官方有做详细说明 https://iceberg.apache.org/ ,我们重点说下iceberg的实践和一些使用踩坑。为什么先讲述presto和trino引擎操作,主要是这两个组件没有找到详细介绍的文档,另外关于spark/flink会有更多的文章介绍,后续也可以讲下结合其他引擎遇到的坑。
有些文章没有按照最新官网文档来,或者不去多实践就得出一些结论(比如iceberg还不支持行级更新等),目前我验证最新presto-0.276和flink15在 sql还不支持直接非分区键删除或更新,但 spark/trino 都是能通过sql直接行级更新的。

环境准备

操作需要我们先安装一些组件,测试的话单机部署就好。列举下我这边使用的版本:
hadoop-3.2.3
hive-3.1.2 (主要使用metastore功能)
presto-0.276
trino-397 (需要下载jdk-17.0.3 及以上版本)

实操crud

presto操作

配置

关于iceberg的配置,官方文档有具体的描述。
presto是支持两类catalog 的分别是hive和hadoop,通过配置iceberg.catalog.type ,我们都创建下。

  1. hadoop类型
    我这里就写下核心配置 etc/catalog/iceberg.properties ,名称iceberg可以自定义。
connector.name=iceberg
hive.metastore.uri=thrift://127.0.0.1:9083
iceberg.catalog.type=hadoop
iceberg.catalog.warehouse=hdfs://127.0.0.1:8020/user/iceberg/hadoop_db
  1. hive类型
    etc/catalog/iceberg1.properties
connector.name=iceberg
hive.metastore.uri=thrift://localhost:9083
iceberg.catalog.type=hive

测试

链接presto ./presto-cli.jar --server localhost:8080 --catalog iceberg ,指定catalog为刚才创建好的hadoop类型。然后创建并使用test_db 的schema

presto> create schema test_db;
CREATE SCHEMA
presto> 
presto> use test_db;
USE
presto:test_db> 

可以通过hadoop 路径来验证你指定的warehouse有没有生成目录。
在这里插入图片描述
我们创建test1表,并在表里插入一些数据

presto:test_db> CREATE TABLE test1 ( 
             ->     "id" bigint,                        
             ->     "data" varchar                      
             ->  )             ;
CREATE TABLE
presto:test_db> show create table test1;
             Create Table             
--------------------------------------
 CREATE TABLE iceberg.test_db.test1 ( 
    "id" bigint,                      
    "data" varchar                    
 )                                    
 WITH (                               
    format = 'PARQUET'                
 )                                    
(1 row)

Query 20220926_094457_00039_yd26t, FINISHED, 1 node
Splits: 1 total, 1 done (100.00%)
81ms [0 rows, 0B] [0 rows/s, 0B/s]

presto:test_db> 
presto:test_db> insert into test1 values (1, '张三'), (2, '李四');
INSERT: 2 rows

Query 20220926_094551_00040_yd26t, FINISHED, 1 node
Splits: 35 total, 35 done (100.00%)
0:02 [0 rows, 0B] [0 rows/s, 0B/s]

presto:test_db> select * from test1;
 id | data 
----+------
  1 | 张三 
  2 | 李四 
(2 rows)

Query 20220926_094607_00041_yd26t, FINISHED, 1 node
Splits: 17 total, 17 done (100.00%)
111ms [2 rows, 426B] [17 rows/s, 3.73KB/s]

尝试进行行级删除修改,但是会失败。

presto:test_db> delete from test1 where id = 1;
Query 20220926_094632_00042_yd26t failed: This connector only supports delete where one or more partitions are deleted entirely

presto:test_db>  update test1 set data = 'update' where id = 1; 
Query 20220926_094724_00043_yd26t failed: line 1:1: mismatched input 'update'. Expecting: 'ALTER', 'ANALYZE', 'CALL', 'COMMIT', 'CREATE', 'DEALLOCATE', 'DELETE', 'DESC', 'DESCRIBE', 'DROP', 'EXECUTE', 'EXPLAIN', 'GRANT', 'INSERT', 'PREPARE', 'REFRESH', 'RESET', 'REVOKE', 'ROLLBACK', 'SET', 'SHOW', 'START', 'TRUNCATE', 'USE', <query>
update test1 set data = 'update' where id = 1

同样我们通过链接hive的catalog ,创建名为hive_test的schema ,以及表test1,测试也会得到同样结果。

./presto-cli.jar --server localhost:8080 --catalog iceberg1
create schema hive_test;
use hive_test;

CREATE TABLE test1 ( 
    "id" bigint,                        
    "data" varchar                      
);
insert into test1 values (1, '张三'), (2, '李四');
select * from test1;
delete from test1 where id = 1;
update test1 set data = 'update' where id = 1; 

结论

  1. presto 支持iceberg的使用,提供hive和hadoop两种catalog支持
  2. presto sql api目前还不支持删除和修改操作。

trino操作

介绍

trino (https://trino.io/) 是presto创始人和Facebook意见不一致,从Facebook离职后创建的。https://www.sohu.com/a/441573139_315839

配置

目前官方文档也提供两种catalog配置。 hive/glue,我们这里用hive进行演示下。主要配置etc/catalog/iceberg.properties 如下:

connector.name=iceberg
hive.metastore.uri=thrift://9.135.12.10:9083

测试

这里安装trino时需要依赖jdk17,启动端口也要修改下不要和presto重复了,如果不想更新系统全局的JAVA_HOME,需要在bin/launcher 中单独指定:

export JAVA_HOME=/data/opt/jdk-17.0.4.1
export PATH=$JAVA_HOME/bin:$PATH
java -version
# 需要在启动命令前指定java17
exec "$(dirname "$0")/launcher.py" "$@"

我们通过trino-cli 链接测试。通过show schemas 我们会发现之前通过presto创建的hive_test 在这里可以查到

./trino-cli.jar --server localhost:8081 --catalog iceberg

trino> show schemas;
       Schema       
--------------------
 default            
 hive_test          
(4 rows)

但是目前查到的数据确是NULL

trino> select * from hive_test.test1;
  id  | data 
------+------
 NULL | NULL 
 NULL | NULL 
(2 rows)

Query 20220926_102503_00883_99pn2, FINISHED, 1 node
Splits: 1 total, 1 done (100.00%)
0.09 [2 rows, 305B] [21 rows/s, 3.2KB/s]

下面建表test2进行增删改查:
在这里插入图片描述

结论

  1. trino目前支持hive/glue的catalog,但不支持hadoop(我们在使用spark,flink时常用这种类型)
  2. trino通过客户端能直接进行行级的增删改查。
Apache Iceberg 数据湖管理核心原理与生产实践 数据湖管理本质是解决数据可靠性、版本一致性与协作可追溯性问题。Iceberg 作为新一代开放表格式,通过事务性元数据、快照(Snapshot)机制和三层元数据结构(Manifest/Manifest List/Metadata File),实现了类数据库的原子写入、时间旅行查询与 Schema 演进审计。其 Scalable 特性体现在百亿级数据规模下仍保持确定性行为,Management 能力覆盖跨引擎一致性读写、行级删除与合规治理。本文深入解析 Iceberg 如何替代 Hive rename 语义、规 阅读详情

相关推荐

Apache Iceberg:云原生数据湖的可管理性革命

数据湖表管理是现代大数据架构的核心挑战,涉及元数据一致性、多引擎Schema演化、事务隔离与历史快照追溯等基础能力。Apache Iceberg 通过元数据分层、隐藏分区、快照隔离三大机制,将‘表’重构为可版本化、可审计、可演化的第一等公民,从根本上解决Hive时代目录耦合、伪事务、Schema不兼容等系统性缺陷。其设计直击企业级数据治理痛点——支持Trino/Spark/Flink跨引擎协同、SQL级时间旅行查询、声明式快照管理与自动化小文件合并,已成为云厂商托管服务(如AWS Athena、Azure

weixin_34216196的博客 366

Iceberg 数据治理及查询加速实践

此时俩类查询的 bloom filter 产生的效果是不一样的,因为热门的 token 会存在大部分数据文件里,冷门的 token 大概率只存在于少部分数据文件内。对于热门 token,bloom filter 的加速效果不佳,但对于冷门 token,bloom filter 帮助其快速过滤掉了很多数据文件,快速找到有冷门 token 的数据文件,加速效果极佳。将相似数据聚集在一起的好处是更少的文件可能具有与查询相关的数据,这意味着 min/max 的好处会更大(扫描的文件越少,速度越快)。

Gefangenes的博客 665

Doris + Iceberg 实现冷热数据智能分层:架构设计与最佳实践

本文详细介绍了如何利用Doris和Iceberg实现冷热数据智能分层,通过架构设计与最佳实践,有效降低存储成本并提升查询性能。Doris负责实时热数据分析,Iceberg管理历史冷数据存储,两者结合形成高效的数据湖解决方案。文章还提供了具体的实现细节和常见问题解决方案,帮助开发者快速落地该架构。

weixin_28691741的博客 413

Trino安装部署连接iceberg

*一、Trino介绍**Trino是针对OLAP设计的用于高效的分布式查询大量数据的分析引擎。Trino的架构如下图所示。由一个coordinator和多个worker节点组成的Trino集群。Trino用户通过一个客户端连接到coordinator。coordinator与访问数据源的worker进行协作。一旦它接收到一条SQL语句,协调器就负责跨Trino工作节点解析、分析、计划和调度查询执行。该语句被转换为运行在一组worker上的一系列连接的任务。

weixin_47924795的博客 2319

Spark、Flink、Kafka、Hive、Trino:生产级数据栈协同原理与避坑指南

在现代大数据架构中,批处理、实时计算、消息传输、元数据管理与跨源查询并非孤立技术,而是紧密耦合的系统能力。Apache Spark提供统一编程模型支撑ETL与机器学习,Flink以事件时间语义保障毫秒级实时性,Kafka作为流式存储底座承载高吞吐数据流动,Hive演进为湖仓一体的元数据中枢,Trino则实现免移动数据的联邦查询。这些框架的技术价值不在单点性能,而在于协同时的数据一致性、运维可控性与团队可维护性。本文聚焦真实生产环境中的参数调优、状态管理、分区设计、ACID事务及Connector配置等关键实

weixin_30443075的博客 624

Apache Iceberg:构建可扩展、强一致数据湖的核心协议

数据湖在PB级规模与高并发写入下,常面临ACID缺失、读写不一致、Schema演进失败等根本性挑战。Apache Iceberg作为开放的表格式协议,通过快照隔离、隐式分区、行列级统计和元数据强一致性设计,从存储层重构事务语义,实现金融级数据准确性。它不依赖Hive Metastore,支持Spark、Flink、Trino等多引擎统一访问,天然适配云对象存储(如S3),并提供时间旅行、Z-Order聚簇、小文件治理等生产级能力。本文基于电商、IoT、金融三大场景,详解Iceberg如何支撑Scalable

weixin_34032792的博客 372

Apache Iceberg数据湖与Trino的集成

目录1. 介绍2. 配置Connector 1. 介绍 Trino连接Iceberg的Connector,需要通过Hive的metastore,查询每个partition的HDFS location,然后获取partition下的metadata文件信息 2. 配置Connector 在所有节点上新建catalog配置文件 [root@bigdata001 catalog]# pwd /opt/trino-server-375/etc/catalog [root@bigdata001 catalog]# [

Bulut0907 2691

Apache Iceberg:现代数据湖的表操作系统与生产实践指南

数据湖表管理正从‘手动文件操作’迈向‘声明式元数据治理’。Apache Iceberg 作为开源数据表格式,以快照(Snapshot)、清单(Manifest)和元数据(Metadata)三层架构,实现跨引擎ACID事务、Time Travel、隐藏分区与确定性Schema演进。其核心价值在于解耦计算与存储,兼容Spark/Flink/Trino等引擎,不依赖特定云厂商,支撑PB级实时数仓与高并发写入场景。本文聚焦Iceberg在金融风控、电商实时分析等生产环境中的落地路径,涵盖Glue Catalog集成

weixin_30664615的博客 433

Iceberg-Trino 如何解决链上数据面临的挑战

本文我们将以 Footprint Analytics 的技术架构演变作为分析案例,探索 Iceberg-Trino 如何解决链上数据面临的挑战

m0_60517769的博客 2335

Apache Iceberg:数据湖的ACID操作系统与生产落地指南

数据湖表格式是支撑现代湖仓一体架构的基础技术,其核心能力包括ACID事务、Schema演进、时间旅行和隐藏分区。Apache Iceberg作为开放表格式标准,通过元数据分层、快照隔离与乐观并发,在对象存储上低成本实现数据库级数据可靠性。相比Hive的强耦合文件路径与锁机制,Iceberg以松耦合元数据协议解耦存储与计算,显著提升并发写入性能、查询裁剪效率与跨引擎兼容性。本文聚焦Iceberg在Spark/Flink/Trino多引擎环境下的生产部署、核心操作、避坑实践与湖仓落地验证,涵盖隐藏分区、MERG

weixin_30607659的博客 324

Lake House架构核心解析:外部表、文件格式与存储成本实战指南

Lake House(湖仓一体)是一种融合数据湖低成本扩展性与数据仓库强Schema治理能力的现代数据架构。其核心依赖表格式(如Delta Lake、Iceberg、Hudi)在对象存储之上构建ACID事务、时间旅行和智能分区裁剪能力。理解外部表的元数据-数据解耦特性,可避免跨引擎写入不一致风险;合理分层选用Parquet(分析优化)、Avro(Schema演进)、ORC(高吞吐写入)等文件格式,直接影响查询性能与存储效率;而对象存储的真实成本远不止$0.023/GB——隐藏在请求次数、扫描字节数和生命周期

weixin_33896726的博客 348

大数据入门之Presto/Trino

Presto是由Facebook开发的分布式sql查询引擎,用来进行高速、实时的数据查询。

shufanhao.top Blog 4721

对象存储在大数据场景中的真实效能与落地实践

对象存储(Object Storage)作为现代数据湖的核心底座,其本质是面向海量非结构化数据的键值型存储系统,而非传统POSIX文件系统。它在成本弹性、无限扩展和多引擎兼容性上具备显著优势,但与Spark、Presto等大数据计算引擎存在天然张力:元数据操作延迟高、小文件局部读取不稳定、最终一致性模型易引发脏读。高效使用的关键在于理解其技术边界——通过S3A Connector深度调优、Parquet+Z-Order数据格式治理、Delta Lake/Iceberg事务层增强,以及严格的分区策略与生命周期

weixin_30236595的博客 371

Presto(Trino)从安装到使用

之前安装过Presto版本,但是由于需要连接Phoenix+hbase,Phoenix版本是5.1.2,而Presto已有的版本只支持Phoenix4.16.1,对应的hbase的1.X版本,所以切换到Trino版本。需要注意的是trino最低支持jdk11版本,而大部分大数据组件依赖的jdk都是1.8,所以以下的安装是基于jdk1.8和jdk11的双版本同时存在的,通过不同的用户使用不同的环境变量来保持双版本不冲突。以下是各个基础组件的相关版本供参考,组件全部使用的是Apache官方的组件,并不是CDH版

硅谷工具人 3223

高效打卡系统设计:从行为心理学到实践工具

打卡系统作为现代时间管理的重要工具,其核心原理植根于行为心理学中的即时反馈机制和习惯养成理论。通过科学设计的打卡周期和可视化反馈,能有效提升个人自律性和目标达成率。在技术实现上,从纸质记录到数字化工具(如Notion、Excel自动化模板)的演进,为不同场景提供了灵活解决方案。特别在习惯追踪和进度管理领域,结合热力图生成、数据统计等技巧,打卡系统能转化为强大的自我监督工具。本文通过实践案例,详解如何构建兼顾弹性和约束力的个性化打卡方案,帮助读者突破'三天打鱼两天晒网'的常见困境。

weixin_30047059的博客 338

Android开发者必看:F2FS文件系统如何优化你的手机存储性能(附实测数据对比)

本文深入解析了F2FS文件系统如何针对闪存特性优化Android设备存储性能。通过对比ext4,F2FS采用追加写和冷热数据分离策略,将随机写转化为顺序写,显著提升写入速度并减少GC卡顿。实测数据显示,其在随机写入和SQLite事务等场景下性能提升显著,为开发者提供了优化应用IO性能的关键思路。

weixin_29248313的博客 325

开源大数据:Iceberg新一代数据湖技术实践

数据湖三剑客 1、Iceberg 基本结构 1-1、Iceberg 表格式 Apache Iceberg是一种用于大型分析数据集的开放表格格式。Iceberg向Trino和Spark添加了使用高性能格式的表,其工作方式就像SQL表一样 2、Icebreg 核心 通过快照方式,在时间延续上记录表的所有变化 2-1、某个时间节点,表的所有数据文件列表 2-2、每次更新操作都生成新的快照 2-3、实现数据:...

ejinxian的专栏 1761

Mac用户解决WPS中的俄语显示红线问题(WPS添加外语拼写检查)

我所使用的WPS版本:AppleStore 下载的 MacOs版 3.3.0 首先,对于 在访达-应用程序中,找到WPS,右键-点击“显示包内容” 然后按照下图的索引目录(Contents\Resource\office6\dicts\spellcheck),最后进入一个叫“spellcheck”的文件夹 最后将下载好的字典包(例如上图中的 en_US就代表美式英语;ru_RU就代表俄语) 关于字典包资源下载,我在网上找到一个Google云盘,里面包含了法语,德语,西语,意大利语,葡萄牙.

qq_48159150的博客 7897

湖仓事务底座:从零吃透 Iceberg 核心设计

lceberg:为了解决数据存储和计算引擎之间适配的问题表格式可以理解为元数据以及数据文件的一种组织方式,处于计算框架(flink、spark)之下,数据文件之上跟hive功能差不多,但是比他的功能强大hive读取hdfs的文件 是以目录(分区)扫描的,Iceberg是以文件扫描的,大大提高了查询效率表格能力HiveIcebergACID 事务仅有限支持,并发易冲突完整 ACID,多引擎并发读写Schema 变更修改字段需重写全表仅改元数据,秒级生效分区调整。

2503_94597397的博客 386

基于Dify与DeepSeek构建中医智能问答工作流:从知识库到精准处方

本文详细介绍了如何利用Dify与DeepSeek构建中医智能问答工作流,实现从知识库构建到精准处方的全流程。通过模型编排和知识检索技术,系统能够结合中医辨证思维与AI推理能力,为基层医师、学生和爱好者提供结构化诊疗建议。文章重点分享了知识库选材、症状标准化处理、智能检索与辨证推理等核心环节的实战经验。

weixin_29062255的博客 251

ICC II 时钟树综合(CTS)前奏:从约束定义到NDR规则的全方位设置指南

本文详细介绍了ICC II中时钟树综合(CTS)的前期准备工作,包括约束定义、NDR规则设置和时钟平衡点控制等关键步骤。通过实际案例和代码示例,指导工程师如何优化时钟偏斜、插入延迟和信号质量,确保芯片设计的时序收敛和性能稳定。特别强调了非默认布线规则(NDR)在时钟网络设计中的重要性。

weixin_42530458的博客 212

常见OLAP引擎介绍与对比

开源低成本:ClickHouse/Presto/Doris(社区活跃,部署简单)。商业高可靠性:SAP HANA(适合大型企业核心业务)。追求单表性能,选ClickHouse;追求跨源灵活查询,选Presto/Trino;追求固定报表速度,选Kylin;追求湖仓一体,选Iceberg+Trino;追求国产企业级适配,选Doris。实际落地时,通常会结合多种引擎(如“ClickHouse做日志分析 + Presto做跨源关联 + Kylin做固定报表”),形成互补的OLAP分析体系。

m0_53571279的博客 1135

EBS开发_创建AP付款

--以下代码于20181002在Tony环境测试通过 /* BEGIN   --mo_global.init('SQLAP');   apps.fnd_global.apps_initialize(user_id =&gt; 1110, resp_id =&gt; 50597, resp_appl_id =&gt; 20003);   --mo_global.set_policy_context(...

蜗牛先生快跑的博客 4767

数据湖架构设计与实践:从存储到治理全解析

数据湖作为现代数据架构的核心组件,通过原生支持结构化与非结构化数据的存储,解决了传统数据仓库在灵活性和扩展性上的局限。其技术原理基于分布式存储系统(如HDFS/S3)与元数据管理体系的结合,配合Delta Lake/Iceberg等表格式实现ACID特性。在工程实践中,数据湖显著提升了金融风控、实时推荐等场景的数据处理效率,特别是与Spark/Flink等计算框架结合时,能同时满足批流一体需求。通过分层存储策略和Atlas等元数据工具的应用,有效避免了数据沼泽问题。当前数据湖技术正与机器学习特征库、实时分析

weixin_30527423的博客 440

Altium Designer系列: 软件系统参数配置保存

【Altium Designer实践】 软件系统参数配置保存 作者 CodeAllen ,转载请注明出处 目录设置中文菜单高亮模式设置文件关联pcb设置布线设置保存配置文件(复用) 设置中文菜单 DXP->Preferences 高亮模式设置 文件关联 pcb设置 布线设置 保存配置文件(复用) ......

CodeAllen嵌入式 2019

YOLOv11【第六章:模型压缩与极致优化篇·第15节】YOLOv11 专用剪枝工具库使用指南!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 1312
上一篇: Debezium指定binlog位置初始化异常排查修复
下一篇: Flink源码解析(一、source原理)
yyoc97
博客等级 码龄12年 272粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值