当前位置: 首页 > article >正文

【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"

http://www.kler.cn/a/535088.html

相关文章:

  • DeepSeek-r1模型本地化部署最新教程
  • “AI隐患识别系统,安全多了道“智能护盾”
  • PHP 中 `foreach` 循环结合引用使用时可能出现的问题
  • Vue - customRef 自定义ref
  • CSS的媒体查询语法
  • 深度探索DeepSeek-R1:AI大模型的本地应用与个人知识库构建
  • Hangfire.NET:.NET任务调度
  • ByConity二进制集群版部署
  • 康谋方案 | BEV感知技术:多相机数据采集与高精度时间同步方案
  • DeepSeek-R1 本地电脑部署 Windows系统 【轻松简易】
  • ASP.NET Core标识框架Identity
  • Spring Boot框架知识总结(超详细)
  • ORACLE用regexp_sbustr函数截取json值的sql。
  • 蓝桥杯嵌入式备赛(三)—— LED +按键 + LCD
  • 虚拟机搭建---K8S环境
  • GoFrame 微服务脚手架模块 (v2.8.x)
  • LeetCode 72.编辑距离
  • UE5 蓝图学习计划 - Day 14:搭建基础游戏场景
  • MySQL InnoDB引擎 高度为3的B+树,可以存储的数据量
  • 高级java每日一道面试题-2025年01月30日-框架篇[SpringBoot篇]-如何理解 Spring Boot 配置加载顺序 ?
  • 树欲静而凤不止
  • redis之RDB持久化过程
  • Spring Boot整合MQTT
  • 2025游戏行业的趋势预测
  • GB/T 43698-2024 《网络安全技术 软件供应链安全要求》标准解读
  • Docker镜像管理:掌握save/load与export/import的精髓