前言
接上篇文章:Hudi源码 | Insert源码分析总结(一)(整体流程),继续进行Apache Hudi Insert源码分析总结,本文主要分析上文提到的WorkloadProfile
版本
Hudi 0.9.0
入口
入口在上篇文章中讲到的BaseJavaCommitActionExecutor
的execute
接上篇文章:Hudi源码 | Insert源码分析总结(一)(整体流程),继续进行Apache Hudi Insert源码分析总结,本文主要分析上文提到的WorkloadProfile
Hudi 0.9.0
入口在上篇文章中讲到的BaseJavaCommitActionExecutor
的execute
Apache Hudi Insert源码分析总结,以Java Client为例,不了解Hudi Java Client的可以参考: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源码不熟悉的更容易上手。
4、等分析完Java Client源码后,有时间的话我会再总结一下Spark客户端的源码,这样大家会更容易理解。
Hudi 0.9.0
备注:其实每个版本核心代码都差不多,之所以使用0.9.0,一个是因为对于Java Client,我用0.9.0用的比较多,相比于使用最新版可以节省不少时间,另一个原因是,之前总结的Java Client的源码也是基于0.9.0。比如Hudi Clean Policy 清理策略实现分析和Hudi Clean 清理文件实现分析
首先是通过initTable初始化Hudi表,可以看出来主要就是根据我们配置的一些参数,创建.hoodie
元数据目录,然后将这些参数持久化到hoodier.properties
文件中,具体的细节可以自己研究。
上篇文章Flink SQL操作Hudi并同步Hive使用总结总结了如何使用Flink SQL读写Hudi并同步Hive,介绍了创建表的各种方式,但是每一种方式都不太完美。本文介绍一种比较完美的方式,通过Hudi HMS Catalog读写Hudi并同步Hive表,这里的Hudi HMS Catalog实际上就是通过上篇文章最后提到的HoodieHiveCatalog
实现的,PR:[HUDI-4098]Support HMS for flink HudiCatalog,2022年7月18 merge,也就是从Hudi0.12.0版本开始支持(我确认了一下0.11.1版本没有),如果大家要使用的话,必须升级到0.12.0+,本文使用Hudi master 0.13.0-SNAPSHOT。
既然推荐这种方式,那么先说一下它的好处吧。好处是它可以像Spark SQL创建表一样,直接将表建立在Hive中,并且表结构与Hive SQL和Spark SQL兼容,也就是Flink Hudi HMS Catalog中创建的表,可以同时使用Flink SQL、Hive SQL、Spark SQL查询,也可以同时使用Flink SQL、Spark SQL写Hudi。不像上篇文章中介绍的方式,Flink SQL写Hudi的表不能被Hive/Spark使用,只能通过同步表的方式。另外在Flink Hudi HMS Catalog中和Spark SQL一样默认开启同步Hive,也就是对于MOR表默认会同步创建对应的_ro表和_rt表,至于COW表因为同步的表名和创建的表名一样,所以读写是同一张表。总之和Spark SQL创建表、读写一致。
Flink 1.14.3
Hudi master 0.13.0-SNAPSHOT
本文采用Flink yarn-session模式,不会的可以参考:Flink SQL 客户端查询Hive配置及问题解决
more >>我一直是在Win10本地编译Hudi包的,因为这样可以直接在IDEA里修改并调试源码,但是前段时间打包Hudi master代码时,发现在Win10 本地打包出现了异常,原因是这个PR:https://github.com/apache/hudi/pull/6135 引入了proto,需要使用protoc编译.proto
文件,使用的是maven的protoc-jar-maven-plugin,但是通过maven下载的protoc.exe有问题,所以打包失败。
打包命令1
mvn clean package -DskipTests
记录总结自己第一次如何使用Flink SQL读写Hudi并同步Hive,以及遇到的问题及解决过程。
关于Flink SQL客户端如何使用可以参考:Flink SQL 客户端查询Hive配置及问题解决
Flink 1.14.3
Hudi 0.12.0/0.12.1
本文采用Flink yarn-session模式,不会的可以参考之前的文章。
如果想同步Hive的话,就不能使用上面下载的包了,必须使用profileflink-bundle-shade-hive
自己打包,这里参考官网:https://hudi.apache.org/cn/docs/syncing_metastore,打包命令
1 | ## Hive3 |
为了避免不必要的麻烦,最好自己修改一下对应的profile中的Hive版本,比如我们环境的Hive版本为HDP的3.1.0.3.1.0.0-78,我们将hive.version对应的值改为3.1.0.3.1.0.0-78再打包就可以了。
more >>
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true