【Hudi数据湖】hudi集成hive同步元数据

摘要

Spark/Flink可以使用Hive的metastore,但是Hive无法通过Hive metastore中的Spark/Flink表直接查询数据。为了解决这个问题,可以配置使用Hive sync。在Spark/Flink操作表的时候,自动同步Hive的元数据。这样就可以通过Hive查询Hudi表的内容。

Hive metastore通过目录结构的来维护元数据,数据的更新是通过覆盖来保证事务。但是数据湖是通过追踪文件来管理元数据,一个目录中可以包含多个版本的文件。这一点和Hive元数据管理是不同的。所以说为了兼容Hive metastore,Hudi需要实时从Timeline同步元数据到Hive metastore。

环境准备

Flink 1.13.2
Hudi 0.11.1
Spark 3.1.1
Hive 3.1.2

Hive 兼容Hudi格式

复制编译后的packaging/hudi-hadoop-mr-bundle/target/hudi-hadoop-mr-bundle-0.11.1.jar到各节点Hive安装目录的auxlib目录中。

进入beeline后执行:

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

Flink Hudi Hive Sync

如果要使用Hive Sync功能,编译时候需要激活flink-bundle-shade-hive3profile。编译命令如下所示:

mvn clean package -Dflink1.13 -Dscala2.11 -DskipTests -Pflink-bundle-shade-hive3 -T 4

Flink Hive Sync支持两种模式连接Hive:

  • Hive Metastore(hms): 连接Hive Metastore 9083端口。
  • JDBC: 连接HiveServer 10000端口。

两种使用方式如下所示:

-- hms 模式模板
CREATE TABLE t1(
  uuid VARCHAR(20),
  name VARCHAR(10),
  age INT,
  ts TIMESTAMP(3),
  `partition` VARCHAR(20)
)
PARTITIONED BY (`partition`)
WITH (
  'connector' = 'hudi',
  'path' = '${db_path}/t1',
  'table.type' = 'COPY_ON_WRITE',  -- 如果使用MERGE_ON_READ,只有生成parquet文件之后,Hive才能查出数据
  'hive_sync.enable' = 'true',     -- 必须。启用Hive sync
  'hive_sync.mode' = 'hms',        -- 必须。设置模式未hms,默认为jdbc
  'hive_sync.metastore.uris' = 'thrift://${ip}:9083' -- 必须。端口需要在 hive-site.xml上配置
);


-- jdbc 模式模板
CREATE TABLE t1(
  uuid VARCHAR(20),
  name VARCHAR(10),
  age INT,
  ts TIMESTAMP(3),
  `partition` VARCHAR(20)
)
PARTITIONED BY (`partition`)
WITH (
  'connector' = 'hudi',
  'path' = '${db_path}/t1',
  'table.type' = 'COPY_ON_WRITE',  -- 如果使用MERGE_ON_READ,只有生成parquet文件之后,Hive才能查出数据
  'hive_sync.enable' = 'true',     -- 必须。启用Hive sync
  'hive_sync.mode' = 'jdbc',       -- 必须。设置模式未hms,默认为jdbc
  'hive_sync.metastore.uris' = 'thrift://${ip}:9083', -- 必须。端口需要在hive-site.xml上配置
  'hive_sync.jdbc_url'='jdbc:hive2://${ip}:10000',    -- 必须。hiveServer端口
  'hive_sync.table'='${table_name}',                  -- 必须。同步过去的hive表名
  'hive_sync.db'='${db_name}',                        -- 必须。同步过去的hive表所在数据库名
  'hive_sync.username'='${user_name}',                -- 必须。JDBC 用户名
  'hive_sync.password'='${password}'                  -- 必须。JDBC 密码
);

使用HMS方式配置Hive Sync:

CREATE TABLE t1(
  uuid VARCHAR(20),
  name VARCHAR(10),
  age INT,
  ts TIMESTAMP(3),
  `partition` VARCHAR(20)
)
PARTITIONED BY (`partition`)
WITH (
  'connector' = 'hudi',
  'path' = 'hdfs:///zy/hudi/',
  'table.type' = 'COPY_ON_WRITE',
  'hive_sync.enable' = 'true',
  'hive_sync.mode' = 'hms',
  'hive_sync.metastore.uris' = 'thrift://manager127:9083',
  'hive_sync.table'='t1', 
  'hive_sync.db'='default'
);

-- 插入测试数据

INSERT INTO t1 VALUES
  ('id1','Danny',23,TIMESTAMP '1970-01-01 00:00:01','par1'),
  ('id2','Stephen',33,TIMESTAMP '1970-01-01 00:00:02','par1'),
  ('id3','Julian',53,TIMESTAMP '1970-01-01 00:00:03','par2'),
  ('id4','Fabian',31,TIMESTAMP '1970-01-01 00:00:04','par2'),
  ('id5','Sophia',18,TIMESTAMP '1970-01-01 00:00:05','par3'),
  ('id6','Emma',20,TIMESTAMP '1970-01-01 00:00:06','par3'),
  ('id7','Bob',44,TIMESTAMP '1970-01-01 00:00:07','par4'),
  ('id8','Han',56,TIMESTAMP '1970-01-01 00:00:08','par4');

进入beeline,执行:

show tables;

更多文章请扫码关注公众号,有问题的小伙伴也可以在公众号上提出。
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/310301.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode动态规划问题总结 Python

目录 一、基础理论 二、例题 1. 青蛙跳台阶 2. 解密数字 3. 最长不含重复字符的子字符串 4. 连续子数组的最大和 5. 最长递增子序列 6. 最长回文字符串 7. 机器人路径条数 8. 礼物的最大价值 一、基础理论 动态规划其实是一种空间换时间的基于历史数据的递推算法&…

8.2、5GMEC认识篇

MEC:多接入边缘计算(Multi-access Edge Computing),强调的是边缘侧的计算服务。 MEC最大的好处是就近访问业务:MEC是一个资源池,可以部署各种服务器,把需要就近访问的业务部署在MEC的服务器上&a…

400G-哪个形式因素?(QSFP-DD, OSFP, CFP8)

400G收发器形式因素的发展趋势: 随着新技术的出现,采用新的形式因素和特点并不是什么新鲜事。400G时代即将到来,就像之前的技术周期一样,400G市场将针对特定的网络应用提供不同的收发器形式的因素。 下一代收发器外形因子有三个共同属性&am…

快速排序-排序算法

算法思想 快速排序采用的仍然是分治的思想。 Step1.每次在无序的序列中选取一个基准数。 Step2.然后将大于和小于基准数的元素分别放置于基准数两边。(前面部分的元素均小于或等于基准数,后面部分均大于或等于基准数) Step3.然后采用分治法&…

【大数据】NiFi 中的处理器(二):PutDatabaseRecord

NiFi 中的处理器(二):PutDatabaseRecord 1.基本介绍2.属性配置3.连接关系4.应用场景 1.基本介绍 PutDatabaseRecord 处理器使用指定的 RecordReader 从传入的流文件中读取(可能是多个,说数组也成)记录。这…

仿蓝奏云网盘 /file/list SQL注入漏洞复现

0x01 产品简介 仿蓝奏网盘是一种类似于百度网盘的文件存储和共享解决方案。它为用户提供了一个便捷的平台,可以上传、存储和分享各种类型的文件,方便用户在不同设备之间进行文件传输和访问。 0x02 漏洞概述 仿蓝奏云网盘 /file/list接口处存在SQL注入漏洞,登录后台的攻击…

启英泰伦离线自然说:让语音交互更“顺口”

你是不是也有这样的烦恼?每次用语音控制家里的智能设备,总是要说那几个固定的词,感觉有点别扭。比如,每次都要说“打开空调”,不能换个说法吗? 现在,有了启英泰伦的离线自然说技术,…

Kafka之集群搭建

1. 为什么要使用kafka集群 单机服务下,Kafka已经具备了非常高的性能。TPS能够达到百万级别。但是,在实际工作中使用时,单机搭建的Kafka会有很大的局限性。 ​ 消息太多,需要分开保存。Kafka是面向海量消息设计的,一个T…

QT第1天

题目&#xff1a;点击按钮改变文字 需要增加一个count属性&#xff0c;并且只需要定义槽&#xff0c;信号函数已经内置好了 //widget.h#ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Wi…

一文搞定SkyWalking 中Trace、Tracesegment 和 Span 的关系,非常重要!

基础概念 追踪&#xff08;Trace&#xff09; 是指一个请求或者一个操作从开始到结束的完整路径。它涵盖了分布式系统中所有相关组件的调用关系和性能信息。 跨度&#xff08;Span&#xff09; 是Trace的组成部分之一。Span代表一次调用或操作的单个组件&#xff0c;可以是…

centOS系统yum安装和卸载mongodb

0.1 什么是mongodb&#xff1f; 0.2 Mongodb是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 0.3 Mongodb是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据…

C# 关于多态性学习

前言 我相信大家都对面向对象的三个特征封装、继承、多态很熟悉&#xff0c;每个人都能说上一两句&#xff0c;但是大多数都仅仅是知道这些是什么&#xff0c;今天这篇文章是对C# 的多态性学习一下&#xff0c;巩固自己的基础&#xff0c;我们都知道同一操作作用于不同的对象&…

模板管理支持批量操作,DataEase开源数据可视化分析平台v2.2.0发布

2024年1月8日&#xff0c;DataEase开源数据可视化分析平台正式发布v2.2.0版本。 这一版本的功能升级包括&#xff1a;在“模板管理”页面中&#xff0c;用户可以通过模板管理的批量操作功能&#xff0c;对已有模板进行快速重新分类、删除等维护操作&#xff1b;数据大屏中&…

【UE Niagara学习笔记】06 - 制作火焰喷射过程中飞舞的火星

在上一篇博客&#xff08;【UE Niagara学习笔记】05 - 喷射火焰顶部的蓝色火焰&#xff09;的基础上继续实现喷射火焰的火星的效果。 目录 效果 步骤 一、创建材质实例 二、添加新的发射器 2.1 设置粒子材质 2.2 设置发射器持续生成粒子 2.3 设置粒子生成数量 2.4 设…

【麒麟V10系统x86环境--bash: ./install:/bin/bash:解释器错误: 权限不够】

不知道那位大拿分享的这个神操作、给力呀 标题-bash: ./install&#xff1a;/bin/bash&#xff1a;解释器错误: 权限不够 执行这个命令即可&#xff1b;sudo setstatus Softmode

【现代密码学】笔记3.4-3.7--构造安全加密方案、CPA安全、CCA安全 《introduction to modern cryphtography》

【现代密码学】笔记3.4-3.7--构造安全加密方案、CPA安全、CCA安全 《introduction to modern cryphtography》 写在最前面私钥加密与伪随机性 第二部分流加密与CPA多重加密 CPA安全加密方案CPA安全实验、预言机访问&#xff08;oracle access&#xff09; 操作模式伪随机函数PR…

自动化控制面板-1Panel

一、1Panel自动化控制面板 官网地址 1Panel 可以实现&#xff1a; 快速建站、高效管理、安全可靠、一键备份、应用商店 快速建站&#xff1a;深度集成 Wordpress 和 Halo&#xff0c;域名绑定、SSL 证书配置等一键搞定&#xff1b;高效管理&#xff1a;通过 Web 端轻松管理 …

构建数字化美食未来:深入了解连锁餐饮系统的技术实现

在当今数字化时代&#xff0c;连锁餐饮系统的设计与开发已成为餐饮业成功经营的重要一环。本文将深入研究连锁餐饮系统的技术实现&#xff0c;结合代码演示&#xff0c;为技术开发者和餐饮业者提供深刻的理解。 1. 技术选型与系统架构 在开始设计开发前&#xff0c;首先要考…

SD卡无法格式化怎么解决?

如何修复无法格式化的SD卡&#xff1f; 提供了4种SD卡无法格式化的解决方法&#xff0c;你可根据具体情况和需要选择合适的方法。 方法1. 更改驱动器号 有时&#xff0c;SD卡无法格式化是因为SD卡无法访问 。为了确保你的Windows操作系统能够识别并显示你的SD卡&#xff0c;…

《JVM由浅入深学习【七】 2024-01-11》JVM由简入深学习提升分享

亲爱的读者们&#xff0c;欢迎来到本篇博客&#xff0c;这是JVM第七次分享&#xff0c;下面是七个JVM常用常面的分享&#xff0c;请笑纳 目录 1. 几个与JVM 内存相关的核心参数2.如何计算一个对象的大小3.堆为什么要分为新生代和老年代4.JVM堆的年轻代为什么要有两个 Survivor…