数据湖(六):Hudi 与 Flink 整合

数据湖存储解决方案之Hudi Apache Hudi是一个Data Lakes的开源方案,Hudi是Hadoop Upserts Delete and Incremental的简写,它是由Uber开发并开源的Data Lakes解决方案。Hudi能够基于HDFS之上管理大型分析数据集,可以对数据进行插入、更新、增量消费等操作,主要目的是高效减少摄取过程中的数据延迟。官方对 Hudi 的定义如下:Apache Hudi将核心仓库和数据库功能直接引入数据湖。 阅读详情

Hudi 与 Flink 整合

Hudi0.8.0 版本与 Flink1.12.x 之上版本兼容,目前经过测试,Hudi0.8.0 版本开始支持 Flink,通过 Flink 写数据到 Hudi 时,必须开启 checkpoint,至少有 5 次 checkpoint 后才能看到对应 hudi 中的数据。

但是应该是有一些问题,目前问题如下:

  • 在本地执行 Flink 代码向 Flink 写数据时,存在“java.lang.AbstractMethodError: Method org/apache/hudi/sink/StreamWriteOperatorCoordinator.notifyCheckpointComplete(J)V is abstract”错误信息,预计是 hudi 版本支持问题。

  • 写入到 Flink 中的数据,如果使用 Flink 读取出来,会有对应的错误:“Exception in thread "main" org.apache.hudi.exception.HoodieException: Get table avro schema error”,这个错误主要是由于上一个错误导致 Hudi 中没有 commit 信息,在内部读取时,读取不到 Commit 信息导致。

一、maven pom.xml 导入如下包

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <flink.version>1.12.1</flink.version>
</properties>

<dependencies>
    <!-- Flink操作Hudi需要的包-->
    <dependency>
        <groupId>org.apache.hudi</groupId>
        <artifactId>hudi-flink-bundle_2.11</artifactId>
        <version>0.8.0</version>
    </dependency>

    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-clients_2.11</artifactId>
        <version>${flink.version}</version>
    </dependency>

    <!-- java 开发Flink所需依赖 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-java</artifactId>
        <version>${flink.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-streaming-java_2.11</artifactId>
        <version>${flink.version}</version>
    </dependency>

    <!-- Flink 开发Scala需要导入以下依赖 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-scala_2.11</artifactId>
        <version>${flink.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-streaming-scala_2.11</artifactId>
        <version>${flink.version}</version>
    </dependency>

    <!-- 读取hdfs文件需要jar包-->
    <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.9.2</version>
    </dependency>
    <!-- Flink 状态管理 RocksDB 依赖 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-statebackend-rocksdb_2.11</artifactId>
        <version>${flink.version}</version>
    </dependency>

    <!-- Flink Kafka连接器的依赖 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-connector-kafka_2.11</artifactId>
        <version>${flink.version}</version>
    </dependency>

    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-csv</artifactId>
        <version>1.12.1</version>
    </dependency>

    <!-- Flink SQL & Table-->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-table-planner_2.11</artifactId>
        <version>${flink.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-table-api-scala-bridge_2.11</artifactId>
        <version>${flink.version}</version>
    </dependency>

    <!-- Flink SQL中使用Blink 需要导入的包-->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-table-planner-blink_2.11</artifactId>
        <version>${flink.version}</version>
    </dependency>
</dependencies>

二、Flink 写入数据到 Hudi 代码

//1.创建对象
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    val tableEnv: StreamTableEnvironment = StreamTableEnvironment.create(env,EnvironmentSettings.newInstance()
    .useBlinkPlanner().inStreamingMode().build())

    import org.apache.flink.streaming.api.scala._

    //2.必须开启checkpoint 默认有5个checkpoint后,hudi目录下才会有数据,不然只有一个.hoodie目录。
    env.enableCheckpointing(2000)
//    env.setStateBackend(new RocksDBStateBackend("hdfs://mycluster/flinkstate"))

    //3.设置并行度
    env.setParallelism(1)

    //4.读取Kakfa 中的数据
    tableEnv.executeSql(
      """
        | create table kafkaInputTable(
        |  id varchar,
        |  name varchar,
        |  age int,
        |  ts varchar,
        |  loc varchar
        | ) with (
        |  'connector' = 'kafka',
        |  'topic' = 'test_tp',
        |  'properties.bootstrap.servers'='node1:9092,node2:9092,node3:9092',
        |  'scan.startup.mode'='latest-offset',
        |  'properties.group.id' = 'testgroup',
        |  'format' = 'csv'
        | )
      """.stripMargin)

    val table: Table = tableEnv.from("kafkaInputTable")

    //5.创建Flink 对应的hudi表
    tableEnv.executeSql(
      """
        |CREATE TABLE t1(
        |  id VARCHAR(20) PRIMARY KEY NOT ENFORCED,--默认主键列为uuid,这里可以后面跟上“PRIMARY KEY NOT ENFORCED”指定为主键列
        |  name VARCHAR(10),
        |  age INT,
        |  ts VARCHAR(20),
        |  loc VARCHAR(20)
        |)
        |PARTITIONED BY (loc)
        |WITH (
        |  'connector' = 'hudi',
        |  'path' = '/flink_hudi_data',
        |  'write.tasks' = '1', -- default is 4 ,required more resource
        |  'compaction.tasks' = '1', -- default is 10 ,required more resource
        |  'table.type' = 'COPY_ON_WRITE' -- this creates a MERGE_ON_READ table, by default is COPY_ON_WRITE
        |)
      """.stripMargin)

    //6.向表中插入数据
    tableEnv.executeSql(
      s"""
         | insert into t1 select id,name,age,ts,loc from ${table}
      """.stripMargin)

    env.execute()

以上代码需要注意“PRIMARY KEY NOT ENFORCED”可以不指定,如果不指定 hudi 对应的主键列默认是“uuid”,指定后可以使用自定义的列名当做主键。
数据湖浅析(以hudi为例) 数据湖浅析 阅读详情

相关推荐

数据湖架构开发-Hudi入门教程

当下大数据技术在工业环境中应用,主要构建离线数仓和实时数仓,进行大规模数据管理和分析。为了更好管理数据,出现数据湖DataLake:用来存储大量的原始数据。当下最流行数据湖框架Apache Hudi,使用HDFS存储数据,集成Spark、Flink、Hive等分析数据,逐步在大中型公司中使用,构建湖仓一体化架构。为了让大家更好学习使用Hudi,基于0.9.0版本,推出本套课程,从数据湖概念,到集成Spark和Flink,最后整合实际需求案例,由0到1深入浅出剖析Hudi使用,整个课程分为:基础入门篇、应用进

Aa112233aA1的博客 2855

数据湖-hudi概述

数据湖是一个集中式存储库,允许您以任意规模存储所有结构化和非结构化数据。您可以按原样存储数据(无需先对数据进行结构化处理),并运行不同类型的分析 – 从控制面板和可视化到大数据处理、实时分析和机器学习,以指导做出更好的决策。

懒猫的脚印 2万+

数据湖技术之Iceberg-03 Iceberg整合Flink 实时写入与增量读取

本文介绍了Flink与Iceberg数据湖技术的整合方案。使用Flink 1.14.4和Iceberg 0.13.2版本,通过Maven配置相关依赖包。重点展示了如何通过DataStream API将Kafka数据实时写入Iceberg表:包括创建Kafka topic、设置checkpoint、读取Kafka数据、转换为RowData对象,以及配置Hadoop Catalog和Iceberg表Schema。文中提供了完整的代码示例,展示了从Kafka消费数据并写入Iceberg表的完整流程。该方案适用于需

yangwei2048的博客 1294

【Hudi】数据湖

大数据

qq_41466440的博客 1590

【HuDi】B站增量数据湖探索与实践

1. 背景众所周知,越实时的数据越有价值。直播、推荐、审核等领域中有越来越多的场景需要近实时的数据来进行数据分析。我们在探索和实践增量数据湖的过程中遇到许多痛点,如时效性、数据集成同步和批流一体的存储介质不统一的问题。本文将介绍我们针对这些痛点所进行的思考与实践方案。1.1 时效性痛点传统数仓以小时/天级分区,数据完整才可查。然而,一些用户并不需要数据完整,只需要最近的数据做一些趋势分析。因此,现状无法满足用户越来越强的数据时效性需求。传统数仓ETL上一个任务完成后,才能开始下一个任务。即使是小时分区,层级

m0_54252387的博客 1389

数据湖(六):Hudi与Flink整合

Hudi0.8.0版本与Flink1.12.x之上版本兼容,目前经过测试,Hudi0.8.0版本开始支持Flink,通过Flink写数据到Hudi时,必须开启checkpoint,至少有5次checkpoint后才能看到对应hudi中的数据。 但是应该是有一些问题,目前问题如下: 在本地执行Flink代码向Flink写数据时,存在“java.lang.AbstractMethodError: Method org/apache/hudi/sink/StreamWriteOperatorCoordinat

Lansonli(蓝深李)的博客 2719

大数据Hadoop之——Apache Hudi 数据湖实战操作(Spark,Flink与Hudi整合)

简称Hudi,是一个流式数据湖平台,支持对海量数据快速更新,内置表格式,支持事务的存储层、 一系列表服务、数据服务(开箱即用的摄取工具)以及完善的运维监控工具,它可以以极低的延迟将数据快速存储到HDFS或云存储(S3)的工具,最主要的特点支持记录级别的插入更新(Upsert)和删除,同时还支持增量查询。大数据Hadoop之——新一代流式数据湖平台 Apache Hudi。

匠人精神,持之以恒! 2703

数据湖(二十):Flink兼容Iceberg目前不足和Iceberg与Hudi对比

文章目录Flink兼容Iceberg目前不足和Iceberg与Hudi对比一、Flink兼容Iceberg目前不足二、Iceberg与Hudi对比Iceberg和Hudi都是数据湖技术,从社区活跃度上来看,Iceberg有超越Hudi的趋势。他们有以下共同点:Iceberg与Hudi之间不同点在于以下几点:Iceberg只支持一种表存储模式,就是有metadata file、manifest file和data file组成存储结构,查询时首先查找Metadata元数据进而过滤找到对应的 SnapShot对

Lansonli(蓝深李)的博客 1977

Hudi核心知识点详解——快速入门数据湖

Hudi的入门文章

Maynor的博客 1万+

hudi和flink结合使用方案

Apache Hudi(简称Hudi)是Uber创建的一个数据湖框架。2019年1月,Hudi加入Apache孵化器进行孵化,并于2020年5月晋升为Apache顶级项目。它是最流行的数据湖框架之一。 1. hudi与spark解耦 自诞生以来,Hudi一直使用Spark作为其数据处理引擎。如果用户想要使用Hudi作为他们的数据湖框架,他们必须将Spark引入到他们的平台技术栈中。几年前,使用Spark作为大数据处理引擎可以说是非常普遍甚至是自然的。因为Spark既可以执行批处理,也可以使用微批处理来模拟流

u011624157的专栏 2688

日前日内多阶段多时间尺度源荷储协调调度(matlab代码)

多阶段多时间尺度的协调调度的优势是考虑新能源出力的波 动性与随机性,需求响应负荷的不确定性会对电网制定的日前调度计划准确性造成影响,也就是能够更加精准的进行调度和分析,优化结果的可用性更强。在这方面论文里面,金力的《考虑特性分布的储能电站接入的电网多时间尺度源储荷协调调度策略》就考虑了日前日内实时三个阶段调度,每个阶段考虑了不同负荷需求响应策略,同时考虑了负荷波动性的影响,具有很强的参考意义。 目录 一、模型 二、程序运行 三、程序链接 一、模型 负荷需求响应考虑电价型和激励型两种,电.

zhangxd212489的博客 7915

flink cdc 整合 数据湖hudi 同步 hive

1. 版本说明 组件 版本 hudi 10.0 flink 13.5 hive 3.1.0 2. 实现效果 通过flink cdc 整合 hudi 到hive flink cdc 讲解 flink cdc 1.2实例 flink cdc 2.0 实例

wudonglianga的专栏 5867

人工智能学习之机器人路径规划优化

A* AStar 人工智能 机器人路径规划优化

RongLin02的博客 7073

Iceberg、Paimon 与 Hudi:数据湖三剑客的初心与进化

数据湖三剑客对比分析 摘要:Iceberg、Hudi和Paimon是当前主流的数据湖解决方案,各有特色。Iceberg(Netflix开源)专注批处理可靠性,适合PB级离线分析;Hudi(Uber开源)强调实时更新,实现流批平衡;Paimon(Flink社区)则为流式处理优化,提供毫秒级延迟。三者分别采用清单文件、COW/MOR和LSM-Tree架构,在事务控制、Schema演变等方面各具优势。选型需考虑场景需求:离线分析选Iceberg,流批平衡选Hudi,Flink实时数仓则首选Paimon。未来三大项

想~ai抽 1389

【机械视觉】C#+VisionPro实战:位深图(CogImage8Grey)与Bitmap互转技巧及工业检测应用

本文详细介绍了在工业检测中如何使用C#和VisionPro实现位深图(CogImage8Grey)与Bitmap的高效互转技巧。通过实战代码示例和工业应用案例,帮助开发者解决图像处理中的常见问题,提升检测精度和系统性能,适用于半导体、汽车零部件等高精度检测场景。

weixin_29250573的博客 186

STM32 Boot程序实战:从启动流程到安全跳转机制解析

本文深入解析STM32 Boot程序的核心作用与安全跳转机制,涵盖启动流程、内存管理、中断向量表重定向及固件验证等关键环节。通过实战案例分享如何实现可靠的固件升级与故障回退策略,避免设备变砖风险,提升嵌入式系统稳定性。

pluto的博客 779

大数据之数据湖---flink 整合hudi

1.hudi 简介 Huid支持流式的读写操作,流数据可以通过Huid的增量来进行数据追加,精准的保存Index位置,如果一旦写入或者读出的时候出现问题,可以进行索引回滚数据,因为在Hudi写入和写出的时候他是要记录元数据信息的。 Hudi最大的特点就是会进行预写日志功能,也就是把所有的操作都先预写,然后一旦发生问题就会先找预写日志Log,进行回滚或者其他操作,所以你会发现在Hudi中,它会写很多Log日志。 三大特点:流式读写、自我管理、万物皆日志 2.hudi 应用 3. 官网 https://

wudonglianga的专栏 3104

【论文复现】——基于欧式聚类的车载点云道路提取

针对车载激光点云道路信息提取的问题,提出了一种基于欧式聚类的道路提取方法。首先通过统计滤波去除噪点以免对后续处理结果产生影响,然后用坡度滤波去除路坎点,使道路边界与人行道、绿化带等与路坎相连的地物形成10~25 cm的高程阶跃,最后用欧式聚类将路面点云与其他地物点云聚类为一簇或多簇并保留道路簇,从而实现道路点云的精确提取。

点云侠的博客 1135

数据湖之Hudi(4):Apache Hudi 快速发展

目录 0. 相关文章链接 1. Hudi 诞生 2.发展历史 3. 各版本新特性 4.新架构:湖仓一体 0. 相关文章链接 大数据基础知识点 文章汇总 1. Hudi 诞生 Apache Hudi由Uber开发并开源,该项目在2016年开始开发,并于2017年开源,2019年1月进入 Apache 孵化器,且2020年6月称为Apache 顶级项目,目前最新版本:0.9.0版本。 Hudi 一开始支持Spark进行数据摄入(批量Batch和流式Streaming),从0.7.0版本开..

yang_shibiao的博客 2896

2024年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++试卷:带解析)

2024年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++试卷:带解析)

王老师青少年编程 4785

【即插即用模块】注意力篇 | TGRS 2025 | SCPP:独家复现!三特征多尺度注意力融合,涨点必备!

摘要:SCPP(Scale-aware Pyramid Pooling)是一种创新的多尺度特征融合模块,专为U型网络瓶颈设计。它通过局部特征提取(1×1卷积)、多尺度膨胀卷积(1/3/5膨胀率分支)和全局特征聚合(全局平均池化)三重结构,结合SE通道注意力机制和自适应加权融合,显著提升特征表达能力。实验表明,SCPP能有效解决边缘模糊和错误检测问题,在遥感图像分割等任务中表现优异。该模块支持即插即用,适用于各类需要多尺度特征增强的视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 944

大数据Hadoop之——Apache Hudi 数据湖实战操作(FlinkCDC)

Hudi 是一个流式数据湖平台大数据Hadoop之——新一代流式数据湖平台 Apache Hudi大数据Hadoop之——Apache Hudi 数据湖实战操作(Spark,Flink与Hudi整合)数据处理:计算引擎,例如:flink、spark等。数据存储:HDFS、云存储、AWS S3、对象存储等。数据管理数据查询:查询引擎,例如:Spark、Trino(Presto)、Hive、Starrocks(Doris)等。

匠人精神,持之以恒! 4314

第六节 LLaVA模型数据处理源码解读(input_ids/labels/attention_mask/image,上篇)

本篇文章直接介绍llava模型数据加工部分,整体结构说明llava多模态模型输入数据格式,其中包含input_ids/labels/attention_mask与image格式,并给出对应代码位置与整个数据加工流程。最重要,通过debug给出数据解释与代码解读,也通过一个真实数据给出模型输入格式说明。当你阅读完此篇文章,绝对透彻理解llava数据加工过程与内容。显然,一篇博客是无法呈现整个数据细节,我将继续下篇博客呈现数据细节处理。result = input.ne(3) # torch.ne函数调用。

weixin_38252409的博客 3193

Hudi-集成Flink

Hudi集成Flink

迷雾总会解 1232

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Apache Doris 整合 FLINK 、 Hudi 构建湖仓一体的联邦查询入门

是不是使用非常简单,快快体验Doris 湖仓一体,联邦查询的能力,来加速你的数据分析性能。

锋哥聊DORIS数仓 2595

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

flink13.5整合hudi10

1. 版本 组件 版本 hudi 10.0 flink 13.5 2.hudi 源码下载 https://github.com/apache/hudi/releases 2.1 需要改flink 版本为13.5 根目录下面的pom 文件 <flink.version>1.13.5</flink.version> <hive.version>3.1.0</hive.version> <hadoop.version>3.1.

wudonglianga的专栏 1979

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: 数据湖(五):Hudi 与 Hive 集成
下一篇: 数据湖(七):Iceberg 概念及回顾什么是数据湖
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值