首页 > 其他分享 >Apache Hudi 流转批 场景实践

Apache Hudi 流转批 场景实践

时间:2023-02-19 09:33:37浏览次数:35  
标签:12 hudi Flink 写入 流转 Apache Hudi 数据

背景

在某些业务场景下,我们需要一个标志来衡量hudi数据写入的进度,比如:Flink 实时向 Hudi 表写入数据,然后使用这个 Hudi 表来支持批量计算并通过一个 flag 来评估它的分区数据是否完整从而进一步写入分区数据进行分区级别的ETL,这也就是我们通常说的流转批

EventTime计算原理

1.jpg

图中Flink Sink包含了两个算子。第一个writer 算子,它负责把数据写入文件,writer在checkpoint触发时,会把自己写入的最大的一个时间传到commit算子中,然后commit算子从多个上游传过来的时间中选取一个最小值作为这一批提交数据的时间,并写入HUDI表的元数据中。

案例使用

我们的方案是将这个进度值(EventTime)存储为 hudi 提交(版本)元数据的属性里,然后通过访问这个元数据属性获取这个进度值。在下游的批处理任务之前加一个监控任务去监控最新快照元数据。如果它的时间已经超过了当前的分区时间,就认为这个表的数据已经完备了,这个监控任务就会成功触发下游的批处理任务进行计算,这样可以防止在异常场景下数据管道或者批处理任务空跑的情况。

下图是一个flink 1分钟级别入库到HUDI ODS表, 然后通过流转批计算写入HUDI DWD表的一个执行过程。

2.jpg

US调度系统轮询逻辑

3.jpg

如何解决乱序到来问题,  我们可以通过设置spedGapTime来设置允许延迟到来的范围默认是0 不会延迟到来。

Maven pom 依赖

针对此功能特性的Hudi依赖版本如下


<dependencies>
  <dependency>
    <groupId>org.apache.hudi</groupId>
    <artifactId>hudi-flink1.13-bundle</artifactId>
    <version>0.12.1</version>
  </dependency>
</dependencies>

<dependencies>
  <dependency>
    <groupId>org.apache.hudi</groupId>
    <artifactId>hudi-flink1.15-bundle</artifactId>
    <version>0.12.1</version>
  </dependency>
</dependencies>

如何设置EventTime

能够解析的字段类型及格式如下:

类型 示例
TIMESTAMP(3) 2012-12-12T12:12:12
TIMESTAMP(3) 2012-12-12 12:12:12
DATE 2012-12-12
BIGINT 100L
INT 100

用户只需要设置flink conf指定时间字段作为时间推进字段

Map<String, String> options = new HashMap<>();
// 这里省略其他表字段
options.put(FlinkOptions.EVENT_TIME_FIELD.key(), "ts");
HoodiePipeline.Builder builder = HoodiePipeline.builder(targetTable)
     .column("id int not null")
     .column("ts string")
     .column("dt string")
     .pk("id")
     .partition("dt")
     .options(options);

通过设置hoodie.payload.event.time.field指定需要计算的eventtime的字段

create table hudi_cow_01(\n" +
"  uuid varchar(20),\n" +
"  name varchar(10),\n" +
"  age int,\n" +
"  ts timestamp(3),\n" +
"  PRIMARY KEY(uuid) NOT ENFORCED\n" +
")\n" +
" with (\n" +
 // 这里省略其他参数
"  'hoodie.payload.event.time.field' = 'ts'\n"
")

如何读取EventTime

Spark SQL

call show_commit_extra_metadata(table => 'hudi_tauth_test.hudi_cow_01', metadata_key => 'hoodie.payload.event.time.field');

4.png

Java API

代码获取片段如下

Option<HoodieCommitMetadata> commitMetadataOption = MetadataConversionUtils.getHoodieCommitMetadata(metaClient, currentInstant);
if (!commitMetadataOption.isPresent()) {
    throw new HoodieException(String.format("Commit %s not found commitMetadata in Commits %s.", currentInstant, timeline));
}
// 获取到当前版本的时间进度
String eventTime = commitMetadataOption.get().getExtraMetadata().get(FlinkOptions.EVENT_TIME_FIELD.key());
System.out.println("current eventTime: " + eventTime);

输出结果如下

current eventTime: 1667971364742

标签:12,hudi,Flink,写入,流转,Apache,Hudi,数据
From: https://www.cnblogs.com/leesf456/p/17134219.html

相关文章

  • 为Nginx和Apache配置多版本PHP、切割多个conf文件
    有时候我们的项目不可能都是同一个PHP版本,需要每个项目都配置不同版本的PHP,宝塔和PHPStudy就是通过以下配置实现的:Nginx切割conf(非选)在nginx.conf添加includevhosts/*......
  • Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileI
    今天复习javaweb的时候遇到tomcat部署运行不了的问题。这个时候请注意,注意是否jar成功导入。显然我这里是有的,但tomcat就不一定了显然tomcat并没有找到需要的jar包这......
  • C# base64图片数据流转图片
    privatevoidbutton1_Click(objectsender,EventArgse){try{varbase64=this.richTextBox1.Text;......
  • Apache James 系列1 --- 安装
    一、环境1.版本(1)CentOS7.92009;(2)ApacheJames3.6.2;(3)域名:假设我们使用test.com作为我们的邮箱域名。2.准备(1)下载可前往https://james.apache.org/do......
  • 云原生时代顶流消息中间件Apache Pulsar部署实操-上
    @目录安装运行时Java版本推荐LocallyStandalone集群启动验证部署分布式集群部署说明初始化集群元数据部署BookKeeper部署BrokerAdmin客户端和验证TieredStorage(层级存储......
  • org.apache.ibatis.binding.BindingException: Parameter ‘XXXX‘ not found.的问题
    文章目录​​问题分析​​​​[1]两个普通参数​​​​[2]既有参数又有对象​​问题分析是当Dao层的方法有多个参数的时候,我们需要加入@Param注解我下面都是用注解开发的,不......
  • 一步一步教你apache深入优化
    Aache深入优化一、在Centos01上安装apache服务,在Centos02配置DNS服务器使用域名www.stz.com1、在Centos01上安装apache服务配置网站1)切换光盘2)挂载光盘解压源代码程序[root@......
  • Apache 网页深入优化
    一、Apache网页优化概述•在企业中,部署Apache后只采用默认的配置参数,会引发网站很多问题,换言之默认配置是针对以前较低的服务器配置的,以前的配置已经不适用当今互联网时代......
  • Apache日志分割
    1、配置httpd主配置,在httpd子配置目录下创建一个以conf结尾的文件,并添加配置信息Apache日志分割2、创建目录,添加首页,重启服务、关闭防火墙3、访问网页,多刷新几次,查看访问日......
  • 学习笔记——尚好房:Apache Dubbo
    2023-02-12 一、分布式RPC框架ApacheDubbo1、软件架构的演进过程单体架构、垂直架构、SOA架构到微服务架构的演进过程2、单体架构(1)含义:全部功能集中在一个项目内......