大数据Hadoop之——Apache Hudi 与 Presto/Trino集成

news2024/12/26 10:57:42

文章目录

    • 一、概述
    • 二、Trino 环境部署
      • 1)安装JDK
      • 2)安装python
      • 3)安装Trino
        • 1、下载解压并配置环境变量
        • 2、修改配置
        • 3、启动服务
        • 4、测试验证
    • 三、在Hive中创建表关联Hudi表
      • 1)添加jar包
      • 2)创建库表关联Hudi
    • 四、Hudi 与 Trino集成

一、概述

Apache Hudi是一个快速增长的数据湖存储系统,可帮助组织构建和管理PB级数据湖。Hudi通过引入诸如升序、删除和增量查询之类的原语,将流式处理引入到批处理式大数据中。这些功能有助于在统一服务层上更快、更新鲜的数据。Hudi表可以存储在Hadoop分布式文件系统(HDFS)或云存储上,并与流行的查询引擎(如Presto(Trino)、Apache Hive、ApacheSpark和Apache Impala)集成良好。鉴于Hudi开创了一种新的模型,它不仅仅是将文件写入到一个更受管理的存储层,该存储层可以与所有主要的查询引擎进行互操作,因此在集成点是如何演变的方面有了有趣的经验。

在这里插入图片描述

使用presto或者trino分析hudi表数据,最终将结果存储到mysql表中。
在这里插入图片描述

  1. Hive中创建表,关联Hudi表
  2. Presto集成Hive,加载Hive表数据
  3. Presto集成MySQL,读取或者保存数据

二、Trino 环境部署

关于trino或者presto的介绍,可以参考我这篇文章:大数据Hadoop之——基于内存型SQL查询引擎Presto(Presto-Trino环境部署),这里部署trino单机版进行测试。

1)安装JDK

【注意】Trino不同的版本要求的JDK版本也不一样的。这里我安装Trino最新版,JDK也安装最新版本。

wget https://cdn.azul.com/zulu/bin/zulu19.30.11-ca-jdk19.0.1-linux_x64.zip
unzip zulu19.30.11-ca-jdk19.0.1-linux_x64.zip

配置环境变量

# /etc/profile文件中追加如下内容:
export JAVA_HOME=/opt/bigdata/trino/zulu19.30.11-ca-jdk19.0.1-linux_x64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

# 加载生效
source /etc/profile

2)安装python

# version 2.6.x, 2.7.x, or 3.x
yum -y install python3
python3 --version
ln -s /usr/bin/python3 /usr/bin/python

3)安装Trino

这里部署单机版,Coordinator和Worker同进程。

1、下载解压并配置环境变量

wget https://repo1.maven.org/maven2/io/trino/trino-server/401/trino-server-401.tar.gz
tar -xf trino-server-401.tar.gz

# 配置环境变量/etc/profile
export TRINO_HOME=/opt/bigdata/trino/trino-server-401
export PATH=$TRINO_HOME/bin:$PATH

2、修改配置

首先创建etc和data目录,后面配置文件需要用到

cd $TRINO_HOME
mkdir -p data etc/catalog
  • node.properties
cat << EOF > $TRINO_HOME/etc/node.properties
# 环境的名字。集群中所有的Trino节点必须具有相同的环境名称。
node.environment=dev
# 此Trino安装的唯一标识符。这对于每个节点都必须是唯一的。
node.id=trino-worker
# 数据目录的位置(文件系统路径)。Trino在这里存储日志和其他数据。
node.data-dir=/opt/bigdata/trino/trino-server-401/data
EOF
  • jvm.config
cat << EOF > $TRINO_HOME/etc/jvm.config
-server
-Xmx2G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+ExplicitGCInvokesConcurrent
-XX:+ExitOnOutOfMemoryError
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-XX:ReservedCodeCacheSize=512M
-XX:PerMethodRecompilationCutoff=10000
-XX:PerBytecodeRecompilationCutoff=10000
-Djdk.attach.allowAttachSelf=true
-Djdk.nio.maxCachedBufferSize=2000000
EOF
  • config.properties
cat << EOF > $TRINO_HOME/etc/config.properties
# 设置该节点为coordinator节点
coordinator=true
# 允许在协调器上调度工作,也就是coordinator节点又充当worker节点用
node-scheduler.include-coordinator=true
# 指定HTTP服务器的端口。Trino使用HTTP进行内部和外部web的所有通信。
http-server.http.port=9000
# 查询可以使用的最大分布式内存。【注意】不能配置超过jvm配置的最大堆栈内存大小
query.max-memory=1GB
# 查询可以在任何一台机器上使用的最大用户内存。【注意】也是不能配置超过jvm配置的最大堆栈内存大小
query.max-memory-per-node=1GB
# hadoop-node1也可以是IP
discovery.uri=http://local-168-182-130:9000
EOF
  • log.properties
cat << EOF > $TRINO_HOME/etc/log.properties
# 设置日志级别,有四个级别:DEBUG, INFO, WARN and ERROR
io.trino=INFO
EOF
  • 配置hive数据源,hive.properties
cat << EOF > $TRINO_HOME/etc/catalog/hive.properties
connector.name=hive
hive.metastore.uri=thrift://local-168-182-130:9083
hive.config.resources=/opt/bigdata/hadoop/hadoop-3.3.2/etc/hadoop/core-site.xml,/opt/bigdata/hadoop/hadoop-3.3.2/etc/hadoop/hdfs-site.xml
EOF
  • 配置mysql数据源,mysql.properties
# 所有节点都得添加
cat << EOF > $TRINO_HOME/etc/catalog/mysql.properties
connector.name=mysql
connection-url=jdbc:mysql://local-168-182-130:3306
connection-user=root
connection-password=123456
EOF

3、启动服务

$TRINO_HOME/bin/launcher start

# 查看日志
tail -f $TRINO_HOME/data/var/log/server.log

netstat -tnlp|grep :9000

4、测试验证

web访问验证:http://local-168-182-130:9000
在这里插入图片描述

下载对应trino版本的客户端进行连接测试

cd $TRINO_HOME/bin/
wget https://repo1.maven.org/maven2/io/trino/trino-cli/401/trino-cli-401-executable.jar

# 改名,加执行权限
mv trino-cli-401-executable.jar trino
chmod +x trino

# 非交互式连接操作
$TRINO_HOME/bin/trino --server local-168-182-130:9000 --execute="select * from system.runtime.nodes";

### 交互式连接测试
$TRINO_HOME/bin/trino --server local-168-182-130:9000

# 命令不区分大小写
show catalogs;
# 查库
show schemas from system;
# 查表
show tables from system.runtime;
# 查具体记录,查看当前node节点记录
select * from system.runtime.nodes;

在这里插入图片描述

三、在Hive中创建表关联Hudi表

hive 查询hudi 数据主要是在hive中建立外部表,数据路径指向hdfs 路径,同时hudi 重写了inputformatoutpurtformat。因为hudi 在读的数据的时候会读元数据来决定我要加载那些parquet文件,而在写的时候会写入新的元数据信息到hdfs路径下。所以hive 要集成hudi 查询要把编译的jar 包放到HIVE-HOME/lib 下面。否则查询时找不到inputformat和outputformat的类。

1)添加jar包

cp hudi/hudi-0.12.0/packaging/hudi-hive-sync-bundle/target/hudi-hive-sync-bundle-0.12.0.jar $HIVE_HOME/lib

# 重启metastore服务
nohup hive --service metastore &

# 重启hiverserver2
nohup hive --service hiveserver2 > /dev/null 2>&1 &

# 查看日志
tail -f /tmp/root/hive.log

# 连接
beeline -u jdbc:hive2://local-168-182-130:10000  -n root

2)创建库表关联Hudi

### 1、创建数据库
CREATE DATABASE IF NOT EXISTS hudi_hive;
USE hudi_hive;

### 2、创建hive表,指定数据存储路径,关联hudi表路径。
beeline -u jdbc:hive2://local-168-182-130:10000  -n root

CREATE EXTERNAL TABLE hudi_hive.tbl_customer(
id string,
customer_relationship_id string,
create_date_time string,
update_date_time string,
deleted string,
name string,
idcard string,
birth_year string,
gender string,
phone string,
wechat string,
qq string,
email string,
area string,
leave_school_date string,
graduation_date string,
bxg_student_id string,
creator string,
origin_type string,
origin_channel string,
tenant string,
md_id string
)PARTITIONED BY (day_str string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
'org.apache.hudi.hadoop.HoodieParquetInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
'/hudi-hive/customer_hudi' ;

就会在DFS上创建相关的目录
在这里插入图片描述

数据来源可以是flink或者spark任务去写数据,根据具体场景而定。

四、Hudi 与 Trino集成

trino 集成hudi 是基于hive catalog, 同样是访问hive 外表进行查询,如果要集成,需要把hudi trino jar包copy 到trino plugin hive插件下面。

cp hudi/hudi-0.12.0/packaging/hudi-trino-bundle/target/hudi-trino-bundle-0.12.0.jar $TRINO_HOME/plugin/hive/

查询

$TRINO_HOME/bin/trino --server local-168-182-130:9000

show schemas from hive;
show tables from hive.hudi_hive;

select * from hive.hudi_hive.tbl_customer;

trino或者presto将需要查询的数据进行统计写入到其它数据源,这是trino/presto的优势,因为trino/presto本身支持很多种数据源(catalog)。


Hudi与Trino(Presto)的集成讲解就先到这里了,有任何疑问欢迎给我留言,后面会持续更新【大数据+云原生】相关的文章,请小伙伴耐心等待~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud Alibaba系列 Sentinel(三)

高并发下的微服务容错方案&#xff1f; 限流、熔断、降级 1&#xff1a;限流 在高并发系统中一定要用&#xff0c;高并发的所有请求进来&#xff0c;不是让每个请求都打到后台集群的&#xff0c;后台集群有它的消费能力&#xff0c;应该在它消费能力之内放行请求&#xff0c;…

Hadoop HA集群全是standBy解决办法

文章目录原理解决方案原理 hadoop集群配置HA后&#xff0c;会存在多个namenode&#xff0c;但是同一时间仅有一台NN为Active的状态&#xff0c;其他NN都是StandBy的状态。 上图是hadoop集群配置HA的原理图&#xff0c;从上图我们可以看到多个NN的状态切换&#xff0c;是依靠Z…

linux命令与makefile学习

linux命令与makefile学习文件权限通配符*常用命令makefilegcc与g区别&#xff1a;Linux上有一句话&#xff1a;一切皆文件 普通文件 “-” 目录文件 “d” &#xff08;directory&#xff09; 管道文件 “p” &#xff08;piping&#xff09; 链接文件“l” &#xff08;li…

SAP FICO银行账户余额查询表开发说明书(包括开发源代码、测试样例及FS)

程序说明 满足财务银行账户余额查询明细的需求; 支持财务实时查看银行余额数据。 筛选界面 序号 栏位标题 字段类型 是否必须 是否为范围

【pwn】2022 祥云杯 部分wp

【pwn】2022 祥云杯 部分wp 前言 又是一年的祥云杯&#xff0c;相比去年我啥也不会写&#xff0c;今年起码写了几个签到… 又被队友带飞咯 protool Google的Protobuf&#xff0c;参考学习连接 https://bbs.pediy.com/thread-270004.htm 发现了栈溢出&#xff0c;protobuf…

Unity技术手册-UGUI零基础详细教程-Toggle切换

往期文章分享点击跳转>《导航贴》- Unity手册&#xff0c;系统实战学习点击跳转>《导航贴》- Android手册&#xff0c;重温移动开发 本文约3千字&#xff0c;新手阅读需要7分钟&#xff0c;复习需要2分钟 【收藏随时查阅不再迷路】 &#x1f449;关于作者 众所周知&#…

2.6 Python 基本数据类型

1. 数据类型 类型是变量所指的内存中对象的类型. 内置的type()函数可以用来查询变量所指的对象类型。Python 3中有六个标准的数据类型: Numbers(数字), String(字符串), List(列表), Tuple(元组), Sets(集合), Dictionary(字典).2. Numbers 数字型 Python 有三种数字类型 in…

SpringMVC基本配置

小常规 springmvc的处理器对应的bean必须按照规范格式开发&#xff0c;为避免加入无效的bean可通过bean加载过滤器进行包含设定或排除设定&#xff0c;表现层bean标注通常设定为Controller在此发现图片没有加载出来回到程序去分析当发起一个请求以后DispatcherServlet配置拦截所…

【JVM技术专题】 深入分析class字节码指令方法调用详解「原理篇」

方法调用详解 ​ 调用目标在程序代码写好、编译器进行编译时就必须确定下来&#xff0c;这类方法的调用称为解析。 解析 ​ 在Java语言中符合**“编译期可知&#xff0c;运行期不可变”**这个要求的方法&#xff0c;主要包括静态方法和私有方法两大类&#xff0c;前者与类型…

【JavaScript】网页轮播图

目录HTML搭建功能实现小圆圈事件左右按钮事件自动播放轮播图也叫焦点图&#xff0c;是网页中比较常见的网页特效。功能&#xff1a;鼠标经过轮播图模块&#xff0c;左右按钮显示&#xff0c;离开隐藏左右按钮。点击右侧按钮一次&#xff0c;图片往左播放一张&#xff0c;以此类…

UACANet: Uncertainty Augmented Context Attention for Polyp Segmentation代码补充

上一篇看了文章创新点的代码&#xff0c;现在看一下train文件等其余的文件。 看主函数&#xff1a; import os import torch import argparse import tqdm import sysimport cv2 import torch.nn as nn import torch.distributed as distfrom torch.optim import Adam, SGD fr…

CVE-2022-21907 Microsoft Windows HTTP 协议栈远程代码执行漏洞复现

目录 0x01 声明&#xff1a; 0x02 简介&#xff1a; 0x03 漏洞概述&#xff1a; 0x04 影响版本&#xff1a; 0x05 环境搭建&#xff1a; 下载&#xff1a; 开启IIS&#xff1a; 0x06 漏洞复现&#xff1a; 利用POC&#xff1a; 0x07 流量分析&#xff1a; 客户端&am…

算法提升 (三)基础数据结构

作者&#xff1a;小萌新 专栏&#xff1a;算法提升 作者简介&#xff1a;大二学生 希望能够和大家一起进步&#xff01; 内容简介&#xff1a;简单介绍基本数据结构的简单面试题 不负韶华 链表 阅读这篇文章之前需要有初阶数据结构的基础 关于链表的结构如果还有不了解的同学…

智能AI创意图片编辑Luminar Neo

Luminar Neo是Mac上的智能AI技术编辑软件背景替换、图像层、除尘、重新照明选项等&#xff0c;从而实现精确掌控。同时在这款软件中还拥有可简化复杂的编辑程序&#xff0c;如此一来用户即可将自己大脑中想象的愿景变为现实&#xff0c;让使用者能有多大胆的想法都可以在这款软…

深度学习 卷积神经网络原理

深度学习 卷积神经网络原理一、前言二、全连接层的局限性三、卷积层3.1 如何进行卷积运算&#xff1f;3.2 偏置3.3 填充3.4 步长3.5 卷积运算是如何保留图片特征的&#xff1f;3.6 三维卷积3.7 多种特征提取四、池化层五、全连接层六、参考资料一、前言 本文分析了全连接层存在…

burpsuite利用sql注入漏洞猜解数据库名称

目录 一、前提条件 二、burpsuite猜解数据库名 &#xff08;一&#xff09;设置firefox代理 &#xff08;二&#xff09;使用burpsuite的proxy模块截取数据包 &#xff08;三&#xff09;将proxy截取的数据包右击发送到intruder模块 &#xff08;四&#xff09;设置2个变量…

【Spring】快速入门Spring框架

文章目录1. 对Spring的理解2. Spring IoC3. DI4. 如何创建一个Spring项目4.1 创建一个Maven项目4.2 添加Spring框架支持4.3 添加启动类5. 存储Bean对象5.1 添加配置文件5.2 创建Bean对象5.3 注册Bean6. 获取并使用Bean对象7. 更简单存储Bean对象的方式7.1 前置工作7.2 添加存储…

python爬虫1

1.1 网络爬虫概述 网络爬虫&#xff08;又被称为网络蜘蛛、网络机器人&#xff0c;在某社区中经常被称为网页追逐者&#xff09;&#xff0c;可以按照指定的规则&#xff08;网络爬虫的算法&#xff09;自动浏览或抓取网络中的信息&#xff0c;通过 Python 可以很轻松地编写爬…

二叉搜索树+二叉进阶oj

索引二叉搜索树1.二叉搜索树概念与性能分析2.二叉树的应用3.二叉树的实现细节4.类中函数递归调用5.二叉树实现总体代码6.二叉进阶oj7.二叉树三种遍历非递归实现二叉搜索树 1.二叉搜索树概念与性能分析 什么是二叉搜索树 二叉搜索树也被称为二叉排序树&#xff0c;其也可以是一…

热视觉2:使用Python和OpenCV从图像中测量温度

热视觉2:使用Python和OpenCV从图像中测量温度 这篇博客将介绍学习热/中远红外视觉的基础知识,gray8 和 gray16 图像(即最常见的热成像格式)之间的差异,学习如何使用Python和OpenCV从热图像中的每个像素点测量温度,并以不同的调色板显示结果。以及如何实时计算视频流和UV…