欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 【hudi】基于hive2.1.1的编译hudi-1.0.0源码

【hudi】基于hive2.1.1的编译hudi-1.0.0源码

2025/2/7 23:20:18 来源:https://blog.csdn.net/lisacumt/article/details/145468085  浏览:    关键词:【hudi】基于hive2.1.1的编译hudi-1.0.0源码

hudi版本1.0.0
需要使用较低版本的hive,编译hudi只需要修改下类即可:
org.apache.hudi.hadoop.hive.HoodieCombineHiveInputFormat

一、复制org.apache.hadoop.hive.common.StringInternUtils

找个hive2.3.9的源码包,创建包路径,并将此类复制到hudi的hudi-common到下。
当然其他包(hudi-hadoop-mr)也可以。HoodieCombineHiveInputFormat类能读取到就可以。
在这里插入图片描述

二、添加方法并修改

基于不同的hive版本,只是有一些方法,中string <—> path 不同,因此添加一些转换对象,将path和string互转即可。如下:
添加方法:

    public static <T> Map<Path, T> toPathMap(Map<String, T> input) {Map<Path, T> output = new HashMap<>();input.forEach((s, strings) -> {output.put(new Path(s), strings);});return output;}public static <T> Map<String, T> toStrMap(Map<Path, T> input) {Map<String, T> output = new HashMap<>();input.forEach((k, v) -> output.put(k.toString(), v));return output;}public static <T> Map<Map<Path, T>, Map<Path, T>> toMapPathMap(Map<Map<String, T>, Map<String, T>> input) {Map<Map<Path, T>, Map<Path, T>> output = new HashMap<>();input.forEach((k, v) -> {Map<Path, T> k1 = toPathMap(k);Map<Path, T> v1 = toPathMap(v);output.put(k1, v1);});return output;}public static <T> Map<Map<String, T>, Map<String, T>> toMapStrMap(Map<Map<Path, T>, Map<Path, T>> input) {Map<Map<String, T>, Map<String, T>> output = new HashMap<>();input.forEach((k, v) -> {Map<String, T> k1 = toStrMap(k);Map<String, T> v1 = toStrMap(v);output.put(k1, v1);});return output;}

将所有的本类中的类似string和path报错的位置添加转换方法即可。

三、修改pushProjectionsAndFilters参数

此处参考org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat的使用方法:
在这里插入图片描述
参照如下修改即可:

        Path pathTmp = hsplit.getPath(0);pushProjectionsAndFilters(job, inputFormatClass, pathTmp.toString(), pathTmp.toUri().toString());

四、编译

mvn clean package "-Dspark3.3" "-Dflink1.18" "-Dmaven.test.skip=true"  "-Dcheckstyle.skip=true"

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com