董可伦
博主曾获2014年全国数学建模竞赛国家一等奖;有八年大数据经验,大数据领域专家、优快云博客专家。Apache Hudi Active Contributor,喜欢开源,擅长并乐于分享Flink、Hudi、Spark等大数据领域的技术
展开
-
Hudi 源码 | 索引总结 - tag/tagLocation
接上篇文章和之前的总结的源码文章,本文总结源码 tag/tagLocation ,对应功能:根据索引信息判断记录是否存在,如果不存在,代表是新增数据,如果记录存在则代表是更新数据,需要找到并设置 currentLocation。tag/tagLocation :根据索引信息判断记录是否存在,如果不存在,代表是新增数据,如果记录存在则代表是更新数据,需要找到并设置 currentLocation。tagLocation 会利用上篇文章讲的写到 parquet 文件中的 最大值最小值和布隆索引。原创 2024-07-15 14:17:18 · 218 阅读 · 0 评论 -
Hudi 索引总结 - Parquet布隆过滤器写入过程
上篇文章提到 :索引的逻辑主要是根据 parquet 文件中保存的索引信息,判断记录是否存在,如果不存在,代表是新增数据,如果记录存在则代表是更新数据,需要找到并设置 currentLocation。对于布隆索引来说,这里的索引信息其实是布隆过滤器,本篇文章主要是先总结布隆过滤器是如何保存到 parquet 文件中的(主要是源码调用逻辑)。原创 2024-07-10 10:09:10 · 299 阅读 · 0 评论 -
Hudi 写入流程(图)
主要为之前总结的源码文章补充流程图。总结一下整体流程。原创 2024-07-05 11:13:56 · 297 阅读 · 0 评论 -
Hudi extraMetadata 研究总结
研究总结 Hudi extraMetadata ,记录研究过程。主要目的是通过 extraMetadata 保存 source 表的 commitTime (checkpoint), 来实现增量读Hudi表写Hudi表时,保存增量读状态的事务性,实现类似于流任务中的 exactly-once。原创 2024-06-13 19:33:37 · 400 阅读 · 0 评论 -
Hudi CLI 安装配置总结
上篇文章总结了Spark SQL Rollback, Hudi CLI 也能实现 Rollback,本文总结下 Hudi CLI 安装配置以及遇到的问题。原创 2024-06-07 16:46:51 · 290 阅读 · 0 评论 -
Hudi Spark Sql Procedures 回滚 Hudi 表数据
因为有 Hudi Rollback 的需求,所以单独总结 Hudi Spark Sql Procedures Rollback。原创 2024-06-04 15:47:02 · 399 阅读 · 2 评论 -
记录一个 Hudi HBase 依赖冲突问题及解决方案
如题:记录一个 Hudi HBase 依赖冲突问题及解决方案。原创 2024-06-01 15:45:50 · 300 阅读 · 0 评论 -
Hudi Flink MOR 学习总结
之前很少用MOR表,现在来学习总结一下。首先总结一下 compaction 遇到的问题。原创 2024-05-28 19:07:11 · 522 阅读 · 0 评论 -
Hudi Flink SQL源码调试学习(二)- Transformation/StreamOperator总结 - StreamGraph和JobGraph的生成过程
和上篇文章Hudi Flink SQL源码调试学习(一)一样:本着学习hudi-flink源码的目的,利用之前总结的文章中的代码进行调试,记录调试学习过程中主要的步骤及对应源码片段。本文主要总结 Flink 的, 写Hudi与的关系以及Hudi有哪些自定义的,还有Flink的四层执行图以及和JobGraph的生成构建过程。DummySink。原创 2023-08-29 09:10:53 · 269 阅读 · 0 评论 -
记录几个Hudi Flink使用问题及解决方法
如题,记录几个Hudi Flink使用问题,学习和使用Hudi Flink有一段时间,虽然目前用的还不够深入,但是目前也遇到了几个问题,现在将遇到的这几个问题以及解决方式记录一下。原创 2023-08-21 16:52:59 · 904 阅读 · 0 评论 -
Hudi Flink SQL源码调试学习(一)
本着学习hudi-flink源码的目的,利用之前总结的文章Hudi Flink SQL代码示例及本地调试中的代码进行调试,记录调试学习过程中主要的步骤及对应源码片段。本文主要简单记录了自己调试 Hudi Flink SQL 源码的过程,并没有对源码进行深入的分析(自己水平也不够)。主要目的是为了弄清楚从Table API的入口到返回的主要代码步骤以及在哪里调用的的的方法体以进行后面的写Hudi逻辑,这样便于后面对Hudi源码的分析和学习。本文新学习知识点:函数式接口以及对应的 Lambda 表达式的实现。原创 2023-07-31 20:00:05 · 1112 阅读 · 0 评论 -
Hudi Flink SQL代码示例及本地调试
之前在Flink Hudi DataStream API代码示例中总结了Hudi Flink DataStream API的代码及本地调试,并且在文中提到其实大家用Table API更多一些,但是我感觉Table API调试源码可能会比较难一点,因为可能会涉及到SQL解析,不清楚Table API的入口在哪里。但是在我总结的上篇文章Flink用户自定义连接器(Table API Connectors)学习总结。原创 2023-05-30 08:47:29 · 1202 阅读 · 2 评论 -
Flink Hudi DataStream API代码示例
总结Flink通过DataStream API读写Hudi Demo示例,主要是自己备忘用。最开始学习Flink时都是使用Flink SQL,所以对于Flink SQL读写Hudi比较熟悉。但是对于写代码实现并不熟悉,而有些需求是基于Flink代码实现的,所以需要学习总结一下。仅为了实现用代码读写Hudi的需求,其实有两种方式,一种是在代码里通过Flink SQL API,也就是代码中执行Flink SQL,这种方式其实和通过SQL实现差不多,另一种方式是通过DataStream API实现。原创 2023-05-22 10:47:19 · 1539 阅读 · 5 评论 -
Flink MySQL CDC 使用总结
学习总结Flink MySQL CDC,主要目的是同步MySQL数据至其他数据源如Hudi、MySQL等,本文主要以 MySQL2Hudi、MySQL2MySQL两个场景进行示例验证。原创 2023-04-03 19:15:12 · 3729 阅读 · 4 评论 -
Flink SQL Checkpoint 学习总结
学习总结Flink SQL Checkpoint的使用,主要目的是为了验证Flink SQL流式任务挂掉后,重启时还可以继续从上次的运行状态恢复。对于flink sql读取mysql,设置checkpoint恢复不生效(不是flink cdc)checkpoint 一个时间间隔内只有一个批次,这样才能保证eos,时间间隔大小影响写入性能。原创 2023-03-03 14:31:16 · 5534 阅读 · 0 评论 -
Flink SQL增量查询Hudi表
前面总结了Spark SQL增量查询Hudi表和Hive增量查询Hudi表。最近项目上也有Flink SQL增量查询Hudi表的需求,正好学习总结一下。地址:https://hudi.apache.org/cn/docs/querying_data#incremental-query用show_commits看一下有哪些commits(这里查询用的是Hudi的master,因为show_commits是在0.11.0版本开始支持的,也可以通过使用hadoop命令查看.hoodie文件夹下的.commit文原创 2022-12-08 07:00:00 · 3404 阅读 · 41 评论 -
Spark SQL增量查询Hudi表
Hive增量查询Hudi表。最近可能会有Spark SQL增量查询Hudi表的需求,并且我发现目前用纯Spark SQL的形式还不能直接增量查询Hudi表,于是进行学习总结一下。本文总结了Spark SQL增量查询Hudi表的一些参数设置,并给出了示例,介绍了使用纯Spark SQL实现增量查询Hudi表的几种方式,不确定未来社区会采用哪种方式,大家目前如果有这种需求的话,可以先选择一种自己喜欢的方式,等未来社区版本支持后,再升级版本。原创 2022-12-01 08:07:23 · 5277 阅读 · 59 评论 -
Hudi Spark SQL Call Procedures学习总结(一)(查询统计表文件信息)
学习总结Hudi Spark SQL Call Procedures,Call Procedures在官网被称作存储过程(Stored Procedures),它是在Hudi 0.11.0版本由腾讯的ForwardXu大佬贡献的,它除了官网提到的几个Procedures外,还支持其他许多Procedures命令。本文先学习其中的几个我觉得比较常用的命令,主要是查询统计表路径下的各种文件信息。原创 2022-11-25 07:00:00 · 2171 阅读 · 38 评论 -
Hudi源码 | Insert源码分析总结(二)(WorkloadProfile)
Hudi源码 | Insert源码分析总结(一)(整体流程),继续进行Apache Hudi Insert源码分析总结,本文主要分析上文提到的关于的分析一共就这么多,主要是统计record中每个分区路径对应的insert/upsert数量以及upsert数据对应的fileId和,先持久化到.inflight文件中,然后给后面的使用。关于统计的这些信息是如何在中使用的,我们放在下篇文章中分析。原创 2022-11-17 07:00:00 · 3126 阅读 · 81 评论 -
Hudi源码|Insert源码分析总结(一)(整体流程)
Hudi Java Client总结|读取Hive写Hudi代码示例。以Java Client为例的原因:1、自己生产上用的Java Client,相比于Spark客户端更熟悉一点。2、Java Client和Spark、Flink客户端核心逻辑是一样的。不同的是比如Spark的入口是DF和SQL,多了一层API封装。3、Java Client更贴近源码,可以直接分析核心逻辑。不用剖析Spark、Flink源码。对Sprk、Flink源码不熟悉的更容易上手。原创 2022-11-11 07:00:00 · 3800 阅读 · 104 评论 -
Flink SQL通过Hudi HMS Catalog读写Hudi并同步Hive表(强烈推荐这种方式)
上篇文章Flink SQL操作Hudi并同步Hive使用总结总结了如何使用Flink SQL读写Hudi并同步Hive,介绍了创建表的各种方式,但是每一种方式都不太完美。本文介绍一种比较完美的方式,通过Hudi HMS Catalog读写Hudi并同步Hive表,这里的Hudi HMS Catalog实际上就是通过上篇文章最后提到的。原创 2022-11-03 07:00:00 · 4126 阅读 · 76 评论 -
Hudi master 0.13.0-SNAPSHOT Win10 打包异常解决
我一直是在Win10本地编译Hudi包的,因为这样可以直接在IDEA里修改并调试源码,但是前段时间打包Hudi master代码时,发现在Win10 本地打包出现了异常,原因是因为这个PR:[https://github.com/apache/hudi/pull/6135](https://github.com/apache/hudi/pull/6135) 引入了proto,需要使用protoc编译`.proto`文件,使用的是maven的protoc-jar-maven-plugin,但是通过maven下原创 2022-11-03 06:45:00 · 1325 阅读 · 32 评论 -
Flink SQL操作Hudi并同步Hive使用总结
记录总结自己第一次如何使用Flink SQL读写Hudi并同步Hive,以及遇到的问题及解决过程。关于Flink SQL客户端如何使用可以参考:Flink SQL 客户端查询Hive配置及问题解决Flink 1.14.3Hudi 0.12.0/0.12.1本文采用Flink yarn-session模式,不会的可以参考之前的文章。下载地址:https://repo1.maven.org/maven2/org/apache/hudi/hudi-flink1.14-bundle/0.12.1/hudi-fli原创 2022-11-01 07:00:00 · 7499 阅读 · 129 评论 -
Hudi Java Client总结|读取Hive写Hudi代码示例
Hudi除了支持Spark、Fink写Hudi外,还支持Java客户端。本文总结Hudi Java Client如何使用,主要为代码示例,可以实现读取Hive表写Hudi表。当然也支持读取其他数据源,比如mysql,实现读取mysql的历史数据和增量数据写Hudi。原创 2022-10-27 16:43:54 · 4912 阅读 · 87 评论 -
开源经验分享 | 如何从一名小白成为Apache Hudi Contributor
参与Apache Hudi开源有一年多的时间了,马上1024了,虽然距离成为Apache Hudi Commiter还有很遥远的距离,但还是想跟大家分享一下自己的开源经验,讲一下自己如何从开源小白成为Apache Hudi Contributor的。原创 2022-10-22 21:20:24 · 4018 阅读 · 132 评论 -
Hudi源码|bootstrap源码分析总结(写Hudi)
利用Hudi Bootstrap转化现有Hive表的parquet/orc文件为Hudi表本文简单的对Hudi bootstrap的一些关键的源码逻辑进行了分析,希望能对大家有所帮助。限于精力及能力的原因,有些地方可能不够深入,或者不对的地方,还请大家多多指正,让我们共同进步。原创 2022-10-18 10:38:36 · 3015 阅读 · 134 评论 -
写Hudi异常:‘Not an Avro data file‘ 解决方法
记录写Hudi时的一个异常的解决方法,其实这个异常从去年就发现并找到解决方法了,而且已经提交到社区merge了,PR:[HUDI-2675] Fix the exception ‘Not an Avro data file’ when archive and clean。之所以现在又要总结这个异常的处理方法是因为:我们生产环境用的 Hudi0.9.0版本,且没有升级,因为升级Hudi版本可能会有不兼容的问题,需要测试,比较费时,所以目前还没有升级版本,而这个PR合入的版本为0.11.0,所以本文主要总结在0原创 2022-10-14 17:23:42 · 1707 阅读 · 20 评论 -
利用Hudi Bootstrap转化现有Hive表的parquet/orc文件为Hudi表
在最开始学习Hudi源码时,就发现了Hudi有一个Bootstrap功能,但是一直没用过,通过官网文档可知,它可以将现有的表件转化为Hudi表,而且有两种类型和,但是文档并不详细,比如这两种类型的区别具体是啥,支持哪些文件类型的源表。于是带着这些疑问来学习一下它是如何使用的以及源码原理的实现,这样可以更全面的了解Hudi。本文介绍了如何利用Hudi Bootstrap转化现有Hive表为Hudi表,提供了完整的代码示例,并分析了和。原创 2022-10-12 16:25:50 · 1821 阅读 · 20 评论 -
Hudi Spark SQL源码学习总结-select(查询)
上一篇文章Hudi Spark源码学习总结-spark.read.format(“hudi”).load分析了load方法直接查询Hudi表路径的源码逻辑,那么Spark SQL select 表名的方式和load最终走的逻辑是一样的吗?本文带着这个疑问来分析一下select查询Hudi表的源码逻辑通过上面的分析,我们发现Spark查询Hudi表不管是通过load的方式还是通过sqlselect的方法最终走的逻辑都是一样的。都是先查找source=hudi的DataSource,Spark2对应的为。...原创 2022-08-17 09:52:25 · 660 阅读 · 1 评论 -
Hudi Spark源码学习总结-spark.read.format(“hudi“).load(2)
补充上一篇文章Hudi Spark源码学习总结-spark.read.format(“hudi”).load,由于上篇文章篇幅已经比较长了,所以单独写一篇补充一下,没有读过的可以先阅读一下,我们在上篇文章讲到返回的是,那么如果返回呢?本文总结了使用和的原因以及使用时查询Hudi的逻辑,知道了在使用是通过buildScan实现查询的。我在文章学习时,了解到是通过调用buildScan方法来获取数据源的RDD,所以也想看一下的buildScan方法是否也会在查询时用到以及什么情况下会用到,现在还不确定它和。..原创 2022-08-15 14:59:59 · 755 阅读 · 1 评论 -
Hudi Spark源码学习总结-spark.read.format(“hudi“).load
由于工作原因,之前查询Hudi主要是用Hive来查询的,所以对Hive查询Hudi的逻辑比较了解,但是对于Spark查询Hudi的逻辑不太了解。所以现在想要学习一下Spark查询Hudi的大概逻辑,搞清楚它是如何从Spark的源码跳转到Hudi源码执行Hudi查询的逻辑, 这样既能搞清楚Spark查询表的逻辑,也能搞清楚Spark查询Hudi的逻辑,也便于再后面使用Kyuubi Spark SQL 时出现问题能更好的定位解决。...原创 2022-08-11 15:11:27 · 1116 阅读 · 1 评论 -
Hudi Spark源码学习总结-df.write.format(“hudi“).save
在开始学习Hudi的时候,我们知道通过可以实现写Hudi,并且写Hudi的逻辑是在实现的,但是始终有一个疑问:它怎么从跳到中的呢?本文就是主要来回答这个问题的。本文分析总结了从到的调用逻辑,解决了自己最开始学习Hudi时的一个疑惑😄,希望对大家也能有所帮助。......原创 2022-08-03 18:37:45 · 1139 阅读 · 1 评论 -
Hudi Spark SQL源码学习总结-CTAS
上一篇文章Hudi Spark SQL源码学习总结-Create Table总结了Create Table的源码执行逻辑,这一篇继续总结CTAS,之所以总结CTAS,是之前在我提交的一个PR中发现,Spark2和Spark3.2.1版本的CTAS的逻辑不一样,最终走的Hudi实现类也不一样,所以本文分Spark2和Spark3.2.1两个版本分析......原创 2022-08-01 10:39:16 · 1024 阅读 · 1 评论 -
Hudi Spark SQL源码学习总结-Create Table
简要总结HudiSparkSql源码执行逻辑,从建表开始。其实从去年开始接触Hudi的时候就研究学习了HudiSparkSQL的部分源码,并贡献了几个PR,但是完整的逻辑有些地方还没有完全梳理清楚,所以现在想要从头开始学习,搞懂一些知识难点,这样以后看相关源码的时候就不会导致因为一些关键点不懂影响进度。由于本人能力和精力有限,本文只讲解自己觉得比较关键的点,主要目的是梳理整个流程。搞懂了SparkSQL默认的sqlParser为,那么Hudi是一样的吗?那我们就需要看一下开始的这里的f为为。...原创 2022-07-22 09:19:31 · 1826 阅读 · 1 评论 -
Spark3.12+Kyuubi1.5.2+kyuubi-spark-authz源码编译打包+部署配置HA
记录Spark3.1.2+Kyuubi1.5.2从源码打包到部署配置过程,虽然之前总结过一篇Kyuubi配置的文章:Kyuubi 安装配置总结,但是这次和之前还是有不同的:先讲完整的配置,再讲如何编译打包前提:我的环境上有一个ambari自带的Spark2.4.5,路径解压Spark3.1.2的tgz包,将其放到路径 (新建临时目录),并改名为spark3,然后拷贝之前spark2的配置到spark3的配置目录中,已经存在的模板,输入不用覆盖如果是在windows上自己打的包,传到服务器Linux上可能存原创 2022-07-12 11:08:59 · 1996 阅读 · 7 评论 -
Hudi查询类型/视图总结
上面文章Hive增量查询Hudi表提到Hudi表有读优化视图和实时视图,其实当时并没有完全掌握,所以现在单独学习总结。Hudi官网文档中文称之为视图,其实英文为query types翻译过来为查询类型Hudi 支持下面三种视图Snapshot Queries 快照查询/实时视图 Queries see the latest snapshot of the table as of a given commit or compaction action. In case of merge on read tab原创 2022-07-04 19:47:39 · 1220 阅读 · 1 评论 -
Hive增量查询Hudi表
简单总结如何利用Hive增量查询Hudi表我们在写数据时,可以配置同步Hive参数,生成对应的Hive表,用来查询Hudi表,具体来说,在写入过程中传递了两个由命名的Hive表。 例如,如果,我们得到 实现了由 支持的数据集的读优化视图,从而提供了纯列式数据。 实现了由 支持的数据集的实时视图,从而提供了基础数据和日志数据的合并视图。其中实时视图表只有在MOR表同步Hive元数据时才会有按照我之前总结的Apache Hudi 入门学习总结中Hive和Tez部分配置,就可以在Hive命令行里用Hive原创 2022-06-27 16:22:16 · 2026 阅读 · 2 评论 -
Hudi DeltaStreamer使用总结
总结如何利用Hudi DeltaStreamer工具从外部数据源读取数据并写入新的Hudi表,是hudi-utilities-bundle的一部分,按照Apache Hudi 入门学习总结,将hudi-spark-bundle包拷贝至$SPARK_HOME/jars目录下即可。提供了从DFS或Kafka等不同来源进行摄取的方式,并具有以下功能。命令行选项更详细地描述了这些功能:最新版本应该支持了更多参数,可以查阅官网:https://hudi.apache.org/cn/docs/hoodie_delta原创 2022-06-24 14:00:28 · 1350 阅读 · 0 评论 -
Hudi Clean Policy 清理策略实现分析
总结Hudi Clean Policy清理策略,从源码层面分析如何实现原创 2022-06-02 20:49:46 · 766 阅读 · 1 评论 -
Hudi Clean 清理文件实现分析
前言源码层面总结分析Hudi Clean是如何实现的,不了解Hudi Clean的可以先看这篇:一文彻底理解Apache Hudi的清理服务。Hudi Clean主要是清理删除不需要的历史文件,可以根据实际业务需要配置参数,不能影响查询,比如某个查询语句正在用某个文件,Clean如果删除了这个文件,查询就会报错。这里只是删除历史文件,Hudi的文件是有多个版本的,不管配置什么参数,使用什么策略,都不会删除当前最新版本的文件。Hudi 0.9.0版本有两种清理策略KEEP_LATEST_COMMITS原创 2022-05-20 13:49:51 · 1049 阅读 · 0 评论