![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
hudi
文章平均质量分 89
鸿乃江边鸟
Apache Spark Contributor
专注于技术的dotaer
展开
-
Apache Hudi初探(五)(与flink的结合)--Flink 中hudi clean操作
首先是反序列化CleanPlan,然后在进行清理,主要是删除1. 如果没有满足的分区,直接删除该分区,2. 否则删除该分区下的满足条件的文件,最后返回。HoodieFlinkMergeOnReadTable*类型的hudi表,用来做clean等操作。,也就是在写数据失败的时候,会立即进行这次写失败的数据的清理,在这种情况下,创建一个只有一个线程的线程池,改线程池的主要作用来异步执行hudi写操作。本文主要是具体说说Flink中的clean操作的实现。真正执行clean的部分,主要是调用。原创 2023-09-27 13:01:49 · 1182 阅读 · 0 评论 -
Apache Hudi初探(四)(与flink的结合)--Flink Sql中hudi的createDynamicTableSource/createDynamicTableSink/是怎么被调用
最终会调用catalogManager.registerCatalog方法,用catalogManager管理了起来,这样在用到的时候就会调用该get方法得到对应的catalog。来说明一下Flink中createDynamicTableSource/createDynamicTableSink/createCatalog是什么时候被调用的。也说该方法的调用是在逻辑生成阶段的.(createDynamicTableSource方法的调用逻辑也是一样的)对应到SQL中的调用逻辑为。原创 2023-09-08 18:02:58 · 211 阅读 · 1 评论 -
Apache Hudi初探(三)(与flink的结合)--flink写hudi的操作(真正的写数据)
在之前的文章中Apache Hudi初探(二)(与flink的结合)–flink写hudi的操作(JobManager端的提交操作) 有说到写hudi数据会涉及到写hudi真实数据以及写hudi元数据,这篇文章来说一下具体的实现这里的操作就是在HoodieFlinkWriteClient.upsert方法:initTable初始化HoodieFlinkTablepreWrite在这里几乎没什么操作getOrCreateWriteHandle创建一个写文件的handle(假如这里创建的是Flin原创 2023-08-31 23:24:55 · 802 阅读 · 0 评论 -
Apache Hudi初探(二)(与flink的结合)--flink写hudi的操作(JobManager端的提交操作)
在Apache Hudi初探(一)(与flink的结合)中,我们提到了,这个操作真正写hudi是在方法下的,具体分析一下写入的过程。对于这个代码片段,我们主要看 这个对象(这个操作是Flink框架的操作):最主要的算子为,其中最主要的操作是由来完成的:操作,主要是做一些初始化的操作获取当前的task的索引下标,用来向发送event给,之后 StreamWriteOperatorCoordinator() 进行处理,后续会说到StreamWriteOperatorCoordinator初始化hu原创 2023-08-21 22:14:56 · 2136 阅读 · 0 评论 -
Apache Hudi初探(十一)(与spark的结合)--hudi的markers机制
虽然说在Executor端写入了多个重复数据的文件,但是因为在只有一个真正的文件会被Driver认可,所以通过最终返回的被driver认可的文件和marker文件求交集就能删除掉其他废弃的文件。在写入真正文件的同时,会在 .hoodie/.temp/instantTime目录下创建maker文件,比如.hoodie/.temp/202307237055/f1.parquet.marker.CREATE,之后在task.commit的时候会把临时目录的文件真正的移到需要写入的目录下。原创 2023-07-23 10:24:06 · 214 阅读 · 0 评论 -
Apache Hudi初探(十)(与spark的结合)--hudi的Compaction操作
这步操作主要是把生成的Compaction plan序列化成字节,并保存在相应的文件中,并生成一个Compaction的Request。baseFile,partitionPath,logFiles,还有Compaction策略。该方法主要是生成一个调度Compaction的计划。执行当前Commit的compaction操作。重新运行上次失败的Compaction计划。是够是异步Compaction计划生成。中,我们没有过多的解释Spark中。的实现,在这里详细说一下。原创 2023-07-22 16:57:01 · 467 阅读 · 0 评论 -
Apache Hudi初探(一)(与flink的结合)
long ckpTimeout = * 获取到。的方式,只需要引入了对应的jar包即可,以。的方式,所以不需要像使用。的超时时间,并设置为。原创 2023-06-18 16:53:18 · 1419 阅读 · 1 评论 -
Apache Hudi初探(九)(与spark的结合)--非bulk_insert模式
来说,什么也不操作(因为该index每次都会从parquet文件中读取信息从而组装成index),构建一个状态信息,主要是记录一下插入的记录数量和更新的记录数量 其中主要形成了以。(默认是true)会进行元数据的commit操作,这些commit的操作和之前。,则会要求排序,如果没有则只是按照partitioner进行重分区,(这里暂时忽略),主要是对数据进行分区处理,设计到小文件的处理。操作,所以没有去重的需要,所以直接采用spark原生的方式,实例的构造方法中会进行一些额外的操作。原创 2023-06-10 06:17:02 · 1191 阅读 · 0 评论 -
Apache Hudi初探(八)(与spark的结合)--非bulk_insert模式
并且从*.hoodie/20230530073115535.deltacommit* 获取internalSchemaOpt,具体的合并就是把即将写入的schema和internalSchemaOpt进行合并。因为是"bulk insert"操作,所以没有去重的需要,所以直接采用spark原生的方式,把df的schema转换成avro的schema。),则会进行去重处理,具体是调用。开始写操作,这涉及到回滚的操作。,就会进行schema的合并。是没有的,所以不会开启异步的。原创 2023-06-01 07:22:07 · 657 阅读 · 0 评论