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 2690

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

【PyTorch版本兼容性指南】如何在不同版本中正确使用torch.nn.attention

本文详细解析了PyTorch版本兼容性问题,特别是torch.nn.attention模块在不同版本中的使用差异。针对常见的ModuleNotFoundError错误,提供了三种实用解决方案:升级PyTorch版本、使用自定义实现和源码移植方案,并分享了最佳实践建议,帮助开发者有效避免兼容性问题。

weixin_29084231的博客 472

基于OpenCV C++实现工业级形状模板匹配:仿Halcon SBM算法全解析

在计算机视觉和工业自动化领域,模板匹配是一项基础且关键的技术,用于在图像中定位已知目标。其核心原理是通过计算图像区域与预设模板之间的相似度来识别目标位置。传统的基于灰度值的匹配方法对光照变化敏感,鲁棒性不足。而基于边缘梯度方向的形状匹配技术,通过计算轮廓梯度方向的一致性进行相似度度量,从根本上提升了对光照变化的鲁棒性,并支持目标的旋转与缩放,技术价值显著。这项技术广泛应用于工业视觉检测、机器人引导、PCB定位等对精度和稳定性要求极高的场景。本文聚焦于使用开源OpenCV库,从底层仿照Halcon的Shape

weixin_33691817的博客 502

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

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

ejinxian的专栏 1761

美亚杯2023参赛全攻略:从检材下载到Veracrypt挂载的保姆级教程

本文提供美亚杯2023电子数据取证竞赛的完整参赛指南,重点解析从检材下载、Veracrypt挂载到实战取证的保姆级流程。针对新手常见误区,详细说明两套密码(ZIP解压密码与Veracrypt挂载密码)的区别与正确使用方法,并分享赛前环境搭建、赛中高效分析及赛后报告撰写的核心技巧,帮助参赛者系统备赛,规避基础错误。

y9z0a1b的博客 1079

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

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

2503_94597397的博客 386

Autosar Configuration(十四)SomeIP之配置SoAd

本文主要介绍SomeIp协议栈中的SoAd在Configurator中的详细配置

king110108的专栏 2600

YOLOv11的元学习(MAML)few-shot适配-(5样本内快速适应新类别)

本文提出了一种基于元学习和YOLOv11的少样本目标检测方法。首先介绍了元学习的核心概念和MAML算法原理,分析了YOLOv11的架构改进及其在少样本检测中的适用性。针对少样本检测面临的过拟合、特征混淆和定位困难等挑战,提出了基于MAML的解决方案。在实现方面,详细阐述了环境配置、数据预处理和任务采样策略,构建了支持N-way K-shot任务的数据加载器。实验表明,该方法相比传统微调策略可显著提升小样本场景下的检测性能。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 601

常见OLAP引擎介绍与对比

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

m0_53571279的博客 1135

【错误解决】本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止

转载请注明出处:http://blog.youkuaiyun.com/qq_26525215 本文源自【大学之旅_谙忆的博客】 在启动mysql服务时出现该错误: 本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止。mysql 版本 5.7.14 系统 win 7后来经过一系列的百度,谷歌,总算是解决了。首先,你需要把原来的服务删除:mysqld --remove mysq

谙忆-陈浩翔 12万+

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

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

weixin_30527423的博客 440

【安全启动】HSM安全启动原理与技术实现白皮书

摘要: 安全启动(Secure Boot)与度量启动(Measured Boot)通过硬件信任根(HSM/TPM等)确保系统启动链路的可信性,实现代码验证与状态记录。HSM作为核心组件,承担密钥保护、签名验证和密码运算任务,与SHE、TPM等协同构建分层信任链。通用计算与嵌入式/汽车场景的启动流程差异显著,前者依赖TPM的PCR度量,后者以HSM为核心实现硬件级安全闭环。工程实践中需权衡性能、合规性及抗攻击能力,并结合后量子密码(PQC)等演进技术优化方案。

weixin_46481662的博客 834

IgH EtherCAT 从入门到精通:第 29 章 实战:EoE 远程维护通道搭建

摘要:本章详细介绍了基于EoE(Ethernet over EtherCAT)协议的远程维护通道搭建方案。主要内容包括:1)网络架构设计,采用管理网络与EoE子网隔离的方案;2)从站EoE支持确认与IP地址配置,提供API和命令行两种方式;3)路由/交换两种部署模式,重点推荐路由模式并给出自动化配置脚本;4)SSH远程访问配置,包括直接连接和跳板访问两种方式;5)安全加固措施,如防火墙规则、SSH密钥认证等;6)故障恢复机制与性能注意事项。该方案实现了通过EtherCAT网络对从站设备的远程SSH访问、文件

从事嵌入式linux android驱动开发,拥有全栈能力 360
上一篇: 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、付费专栏及课程。

余额充值