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

server/2025/2/8 0:59:23/

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"

http://www.ppmy.cn/server/165811.html

相关文章

k8s常见面试题1

k8s常见面试题1 Kubernetes 基础知识核心组件及作用Pod、Deployment、Service的区别保证Pod高可用ConfigMap vs Secret网络模型与Pod通信Ingress 与 Service 的主要区别什么是 Ingressk8s中为什么要做ServiceIngress 与 Service 的区别 资源配额 Kubernetes 实践如何监控 Kuber…

安卓pad仿写element-ui表单验证

安卓pad仿写element-ui表单验证 背景&#xff1a;仿写对象&#xff1a;showcase&#xff1a; 布局总览&#xff1a;核心代码总览&#xff1a;代码仓&#xff1a; 背景&#xff1a; 最近半年开始接触安卓开发&#xff0c;平时开发接触的点比较零碎&#xff0c;计划闲暇时做一些…

离散浣熊优化算法(DCOA)求解大规模旅行商问题(Large-Scale Traveling Salesman Problem,LTSP),MATLAB代码

大规模旅行商问题&#xff08;Large-Scale Traveling Salesman Problem&#xff0c;LTSP&#xff09;是经典旅行商问题&#xff08;TSP&#xff09;在规模上的扩展&#xff0c;是一个具有重要理论和实际意义的组合优化问题&#xff1a; 一、问题定义 给定一组城市和它们之间的…

低代码系统-插件功能分析( 某道云)

本文主要把其的插件进行了简单分析&#xff0c;不做业务上的梳理&#xff0c;不做推荐。 可大致分为&#xff1a; 群机器人 信息查询 智能识别 实名验证类 数据库类 通知类 通知类 aPaas增强 考勤同步 财务类 类别 插件名称 功能简介 群机器人类 某钉机器人 即在表单处完…

软件设计模式

目录 一.创建型模式 抽象工厂 Abstract Factory 构建器 Builder 工厂方法 Factory Method 原型 Prototype 单例模式 Singleton 二.结构型模式 适配器模式 Adapter 桥接模式 Bridge 组合模式 Composite 装饰者模式 Decorator 外观模式 Facade 享元模式 Flyw…

windows版的docker如何使用宿主机的GPU

windows版的docker使用宿主机的GPU的命令 命令如下 docker run -it --nethost --gpus all --name 容器名 -e NVIDIA_DRIVER_CAPABILITIEScompute,utility -e NVIDIA_VISIBLE_DEVICESall 镜像名效果 (transformer) rootdocker-desktop:/# python Python 3.9.0 (default, Nov 15 …

ubuntu20.04+RTX4060Ti大模型环境安装

装显卡驱动 这里是重点&#xff0c;因为我是跑深度学习的&#xff0c;要用CUDA&#xff0c;所以必须得装官方的驱动&#xff0c;Ubuntu的附件驱动可能不太行. 进入官网https://www.nvidia.cn/geforce/drivers/&#xff0c;选择类型&#xff0c;最新版本下载。 挨个运行&#…

如何使用Webpack构建前端应用?

在现代前端开发中&#xff0c;Webpack已成为构建工具的主流选择&#xff0c;它能够帮助开发者打包和优化应用程序的资源。通过Webpack&#xff0c;前端应用的构建流程变得更加高效和灵活&#xff0c;无论是模块化开发&#xff0c;还是性能优化&#xff0c;都能够轻松实现。本文…