返回顶部
首页 > 资讯 > 精选 >Apache教程Hudi与Hive集成手册的示例分析
  • 436
分享到

Apache教程Hudi与Hive集成手册的示例分析

2023-06-29 18:06:08 436人浏览 八月长安
摘要

小编给大家分享一下Apache教程Hudi与Hive集成手册的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. Hudi表对应的Hive外部表介绍Hud

小编给大家分享一下Apache教程Hudi与Hive集成手册的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

    1. Hudi表对应的Hive外部表介绍

    Hudi源表对应一份hdfs数据,可以通过sparkflink 组件或者Hudi客户端将Hudi表的数据映射为Hive外部表,基于该外部表, Hive可以方便的进行实时视图,读优化视图以及增量视图的查询。

    2. Hive对Hudi的集成

    这里以Hive3.1.1、 Hudi 0.9.0为例, 其他版本类似

    将hudi-hadoop-mr-bundle-0.9.0xxx.jar , hudi-hive-sync-bundle-0.9.0xx.jar 放到hiveserver 节点的lib目录下

    修改hive-site.xml找到hive.default.aux.jars.path 以及hive.aux.jars.path 这两个配置项,将第一步中的jar包全路径给配置上去: 配置后如下

    <name>hive.default.aux.jars.path</name><value>xxxx,jar,xxxx,jar,file:///mypath/hudi-hadoop-mr-bundle-0.9.0xxx.jar,file:///mypath/hudi-hive-sync-bundle-0.9.0xx.jar</value>

    配置完后重启hive-server

    对于Hudi的bootstrap表(tez查询),除了要添加hudi-hadoop-mr-bundle-0.9.0xxx.jar , hudi-hive-sync-bundle-0.9.0xx.jar这两个jar包,还需把HBase-shaded-miscellaneous-xxx.jar, hbase-metric-api-xxx.jar,hbase-metrics-xxx.jar, hbase-protocol-shaded-xx.jar,hbase-shaded-protobuf-xxx.jar,htrce-core4-4.2.0xxxx.jar按上述步骤添加进去。

    3. 创建Hudi表对应的hive外部表

    一般来说Hudi表在用Spark或者Flink写入数据时会自动同步到Hive外部表, 此时可以直接通过beeline查询同步的外部表, 若写入引擎没有开启自动同步,则需要手动利用hudi客户端工具run_hive_sync_tool.sh 进行同步具体可以参考官网查看相关参数。

    4. 查询Hudi表对应的Hive外部表

    4.1 操作前提

    使用Hive查询Hudi表前,需要通过set命令设置hive.input.fORMat,否则会出现数据重复,查询异常等错误,如下面这个报错就是典型的没有设置hive.input.format 导致的

    java.lang.IllegalArgumentException: HoodieRealtimeReader can oly work on RealTimeSplit and not with xxxxxxxxxx

    除此之外对于增量查询,还需要set命令额外设置3个参数

    set hoodie.mytableName.consume.mode=INCREMENTAL;set hoodie.mytableName.consume.max.commits=3;set hoodie.mytableName.consume.start.timestamp=commitTime;

    注意这3个参数是表级别参数

    参数名描述
    hoodie.mytableName.consume.modeHudi表的查询模式。 增量查询 :INCREMENTAL非增量查询:不设置或者设为SNAPSHOT
    hoodie.mytableName.consume.start.timestampHudi表增量查询起始时间
    hoodie. mytableName.consume.max.commitsHudi表基于hoodie.mytableName.consume.start.timestamp 之后要查询的增量commit次数。提交次数,如设置为3时,代表增量查询从指定的起始时间之后commit 3次的数据,设为-1时,增量查询从指定的起始时间之后提交的所有数据

    4.2 COW类型Hudi表的查询

    例如Hudi原表表名为hudicow,同步给hive之后hive表名hudicow

    4.2.1 COW表实时视图查询

    设置hive.input.format 为org.apache.hadoop.hive.ql.io.HiveInputFormat或者org.apache.hudi.hadoop.hive.HoodieCombineHiveInputFormat后,像普通的hive表一样查询即可

    set hive.input.format= org.apache.hadoop.hive.ql.io.HiveInputFormat;select count(*) from hudicow;

    4.2.2 COW表增量查询

    除了要设置hive.input.format,还需要设置上述的3个增量查询参数,且增量查询语句中的必须添加where 关键字并将_hoodie_commit_time > 'startCommitTime'作为过滤条件(这地方主要是hudi的小文件合并会把新旧commit的数据合并成新数据,hive是没法直接从parquet文件知道哪些是新数据哪些是老数据)

    set hive.input.format = org.apache.hadoop.hive.ql.io.HiveInputFormat;set hoodie.hudicow.consume.mode = INCREMENTAL;set hoodie.hudicow.consume.max.commits = 3;set hoodie.hudicow.consume.start.timestamp = xxxx;select count(*) from hudicow where `_hoodie_commit_time` > 'xxxx'

    注意_hoodie_commit_time 的引号是反引号(tab键上面那个)不是单引号, 'xxxx'是单引号

    4.3 MOR类型Hudi表的查询

    例如mor类型Hudi源表的表名为hudimor,映射为两张Hive外部表hudimor_ro(ro表)和hudimor_rt(rt表)

    4.3.1 MOR表读优化视图

    实际上就是读 ro表,和cow表类似设置完hiveInputFormat 之后 和普通的hive表一样查询即可。

    4.3.2 MOR表实时视图

    设置了hive.input.format之后,即可查询到Hudi源表的最新数据

    set hive.input.format = org.apache.hadoop.hive.ql.io.HiveInputFormat;select * from hudicow_rt;

    4.3.3 MOR表增量查询

    这个增量查询针对的rt表,不是ro表。通COW表的增量查询类似

    set hive.input.format = org.apache.hudi.hadoop.hive.HoodieCombineHiveInputFormat; // 这地方指定为HoodieCombineHiveInputFormatset hoodie.hudimor.consume.mode = INCREMENTAL;set hoodie.hudimor.consume.max.commits = -1;set hoodie.hudimor.consume.start.timestamp = xxxx;select * from hudimor_rt where `_hoodie_commit_time` > 'xxxx'; // 这个表名要是rt表

    说明如下

    set hive.input.format=org.apache.hudi.hadoop.hive.HoodieCombineHiveInputFormat;

    最好只用于rt表的增量查询,当然其他种类的查询也可以设置为这个,这个参数会影响到普通的hive表查询,因此在rt表增量查询完成后,应该设置

    set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;

    或者改为默认值

    set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

    用于其他表的查询。

    set hoodie.mytableName.consume.mode=INCREMENTAL;

    仅用于该表的增量查询模式,若要对该表切换为其他查询模式,应设置

    set hoodie.hudisourcetablename.consume.mode=SNAPSHOT;

    当前Hudi(0.9.0)对接Hive的一些问题,请使用master分支或即将发布的0.10.0版本

    hive读hudi表会将所有的数据给打印出来有严重的性能问题和数据安全问题。

    MOR表的实时视图读取 请按需设置mapReduce.input.fileinputformat.split.maxsize的大小 禁止hive取切分读取的文件,否则会出现数据重复。这个问题当前是无解的,spark读hudi实时视图的时候代码直接写死不会切分文件,hive需要手动设置。

    如果碰到classNotFound, noSuchMethod等错误请检查hive lib库下面的jar包是否出现冲突。

    5. Hive侧源码修改

    为支持Hive查询Hudi的纯log文件需要对Hive侧源码进行修改。

    具体修改org.apache.hadoop.hive.common.FileUtils 如下函数

    public static final PathFilter HIDDEN_FILES_PATH_FILTER = new PathFilter() {      @Override      public boolean accept(Path p) {          String name = p.getName();          boolean isHudiMeta = name.startsWith(".hoodie");          boolean isHudiLog = false;          Pattern LOG_FILE_PATTERN = Pattern.compile("\\.(.*)_(.*)\\.(.*)\\.([0-9]*)(_(([0-9]*)-([0-9]*)-([0-9]*)))?");          Matcher matcher = LOG_FILE_PATTERN.matcher(name);          if (matcher.find()) {              isHudiLog = true;          }          boolean isHudiFile = isHudiLog || isHudiMeta;          return (!name.startsWith("_") && !name.startsWith(".")) || isHudiFile;      }  };

    重新编译hive, 把新编译的hive-common-xxx.jarhive-exec-xxx.jar 替换到hive server的lib目录下注意权限和名字和原来的jar包保持一致。

    最后重启hive-server即可。

    以上是“Apache教程Hudi与Hive集成手册的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

    --结束END--

    本文标题: Apache教程Hudi与Hive集成手册的示例分析

    本文链接: https://lsjlt.com/news/326038.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Apache教程Hudi与Hive集成手册的示例分析
      小编给大家分享一下Apache教程Hudi与Hive集成手册的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. Hudi表对应的Hive外部表介绍Hud...
      99+
      2023-06-29
    • Apache教程Hudi与Hive集成手册
      目录1. Hudi表对应的Hive外部表介绍2. Hive对Hudi的集成3. 创建Hudi表对应的hive外部表4. 查询Hudi表对应的Hive外部表4.1 操作前提4.2 CO...
      99+
      2024-04-02
    • Apache Hudi结合Flink的示例分析
      这篇文章主要介绍Apache Hudi结合Flink的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 实时数据落地需求演进实时平台上线后,主要需求是开发实时报表,即抽取各类数据源做实时etl后,...
      99+
      2023-06-29
    • Apache Hudi多版本清理服务的示例分析
      这篇文章给大家分享的是有关Apache Hudi多版本清理服务的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 回收空间以控制存储成本Hudi 提供不同的表管理服务来管理数据湖上表的数据,其...
      99+
      2023-06-29
    • struts2与Ajax集成的示例分析
      这篇文章主要介绍struts2与Ajax集成的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在当今——Web 2.0概念铺天盖地的Internet环境下,简易的AJAX集成对于一个成功的WEB框架来说是不可或...
      99+
      2023-06-17
    • Apache Hudi内核文件标记机制的示例分析
      这篇文章主要介绍了Apache Hudi内核文件标记机制的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 摘要Hudi 支持在写入时自动清理未成功提交的...
      99+
      2023-06-29
    • SpringBoot集成redis的示例分析
      这篇文章给大家分享的是有关SpringBoot集成redis的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。如何使用springBoot集成redis 定义REmote ...
      99+
      2024-04-02
    • Spring集成MyBatis的示例分析
      这篇文章主要为大家展示了“Spring集成MyBatis的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Spring集成MyBatis的示例分析”这篇文...
      99+
      2024-04-02
    • HIVE中Sqoop1.4.6安装、hive与oracle表互导的示例分析
      这篇文章主要为大家展示了“HIVE中Sqoop1.4.6安装、hive与oracle表互导的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“HIVE中Sqoop1.4.6安装、hive与o...
      99+
      2023-06-03
    • spring boot集成shiro的示例分析
      小编给大家分享一下spring boot集成shiro的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!spring boot提供了一个自带的认证框架,同时...
      99+
      2023-05-30
    • springboot 1.5.2 集成kafka的示例分析
      这篇文章主要介绍springboot 1.5.2 集成kafka的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:随着spring boot 1.5版本的发布,在spring项目中与kafka集成更为...
      99+
      2023-05-30
      springboot kafka
    • spring boot集成rabbitmq的示例分析
      这篇文章主要为大家展示了“spring boot集成rabbitmq的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“spring boot集成rabbitmq的示例分析”这篇文章吧。一、...
      99+
      2023-05-30
      springboot rabbitmq
    • OpenStack和TF集成的示例分析
      小编给大家分享一下OpenStack和TF集成的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!OpenStack和TF集成OpenStack是虚拟机和容器...
      99+
      2023-06-03
    • C4C和Outlook的集成示例分析
      这篇文章将为大家详细讲解有关C4C和Outlook的集成示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。从C4C系统下载Outlook的Addin, 安装之后,会在Outlook里看见一个新的面板:...
      99+
      2023-06-04
    • Hive中静态分区与动态分区的示例分析
      这篇文章给大家分享的是有关Hive中静态分区与动态分区的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  分区是hive存放数据的一种方式。将列值作为目录来存放数据,就是一个分区。这样查询时使用分区列进行...
      99+
      2023-06-02
    • VueJS中集成Medium Editor的示例分析
      这篇文章将为大家详细讲解有关VueJS中集成Medium Editor的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。0x00 前言VueJS 社区里面...
      99+
      2024-04-02
    • 在IDEA中集成maven的示例分析
      这篇文章将为大家详细讲解有关在IDEA中集成maven的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一. 初识maven 1.maven是什么maven是用来帮助我们快速搭建项目结构与...
      99+
      2023-06-20
    • spring集成httpclient配置的示例分析
      这篇文章主要介绍了spring集成httpclient配置的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、简介HttpClient是Apache Jakarta ...
      99+
      2023-06-20
    • SpringBoot项目集成Flyway的示例分析
      这篇文章给大家分享的是有关SpringBoot项目集成Flyway的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、FlywayFlyway是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具...
      99+
      2023-06-15
    • SpringBoot项目集成xxljob的示例分析
      小编给大家分享一下SpringBoot项目集成xxljob的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!xxljob介绍XXL-JOB是一个分布式任务调...
      99+
      2023-06-25
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作