前言
Hudi除了支持Spark、Fink写Hudi外,还支持Java客户端。本文总结Hudi Java Client如何使用,主要为代码示例,可以实现读取Hive表写Hudi表。当然也支持读取其他数据源,比如mysql,实现读取mysql的历史数据和增量数据写Hudi。
版本
Hudi 0.12.0
功能支持
支持insert/upsert/delete,暂不支持bulkInsert
目前仅支持COW表
支持完整的写Hudi操作,包括rollback、clean、archive等
Hudi除了支持Spark、Fink写Hudi外,还支持Java客户端。本文总结Hudi Java Client如何使用,主要为代码示例,可以实现读取Hive表写Hudi表。当然也支持读取其他数据源,比如mysql,实现读取mysql的历史数据和增量数据写Hudi。
Hudi 0.12.0
支持insert/upsert/delete,暂不支持bulkInsert
目前仅支持COW表
支持完整的写Hudi操作,包括rollback、clean、archive等
参与Apache Hudi开源有一年多的时间了,马上1024了,虽然距离成为Apache Hudi Commiter还有很遥远的距离,但还是想跟大家分享一下自己的开源经验,讲一下自己如何从开源小白成为Apache Hudi Contributor的。
如何提交PR,可以参考我转载的这篇:一行代码成为Apache Contributor,这篇文章讲述了怎么提交PR,怎么邮箱订阅以及Jira准备等,详细过程我就不再阐述了,这篇文章主要想分享自己的经验。
我自己之前连Contributor是啥都不知道,其实只要你向社区提交过代码也就是在GitHub上提过PR并且你的代码被merge了,你就是Contributor了,再往上还有Commiter、PMC等,这些我之前都没听过,一般来说你贡献的代码比较多,比如贡献过一个比较大的模块如Hudi Spark SQL,或者你可以负责一个模块,经过PMC的提名、投票等,通过的话就会成为Commiter了,根据我的经验,当贡献代码行数过万时成为Commiter就比较有希望了,当然不是绝对的。Commiter有专门的Apache 账户,有权限merge代码,至于PMC,大家可以自己去了解。Apache Hudi Commiter列表地址:https://hudi.apache.org/cn/community/team
more >>Apache Hudi bootstrap源码简要走读,不了解Hudi bootstrap的可以参考:利用Hudi Bootstrap转化现有Hive表的parquet/orc文件为Hudi表
Hudi 0.12.0
Spark 2.4.4
1 | val bootstrapDF = spark.emptyDataFrame |
记录写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.9.0版本如何解决这个问题,当然也适用于0.11.0版本之前的其他有同样问题的版本。
archive
和clean
时都会有这个异常,主要异常信息:
1 | Caused by: java.io.IOException: Not an Avro data file |
在最开始学习Hudi源码时,就发现了Hudi有一个Bootstrap功能,但是一直没用过,通过官网文档https://hudi.apache.org/cn/docs/migration_guide/可知,它可以将现有的表件转化为Hudi表,而且有两种类型METADATA_ONLY
和FULL_RECORD
,但是文档并不详细,比如这两种类型的区别具体是啥,支持哪些文件类型的源表。于是带着这些疑问来学习一下它是如何使用的以及源码原理的实现,这样可以更全面的了解Hudi。
Hudi 0.12.0
Spark 2.4.4/3.1.2
如题,目前只支持两种文件类型:parquet和orc,对于其他格式的Hive表,比如text就不能用Bootstrap进行转化了
其实官方文档并没有说明支持哪些类型,我们可以在源码里找到答案:
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