【数据仓库】hive on Tez配置

news2025/1/7 13:43:22

hive on Tez 搭建

前提是hive4.0+hadoop3.2.2数仓已搭建完成,现在只是更换其执行引擎 为Tez。搭建可参考【数据仓库】hive + hadoop数仓搭建实践文章。

Tez 下载

下载地址

https://archive.apache.org/dist/tez/

官网地址

https://tez.apache.org/releases/apache-tez-0-10-3.html

这里使用Tez0.10.3版本,下载地址:

https://archive.apache.org/dist/tez/0.10.3/apache-tez-0.10.3-bin.tar.gz

安装配置

# 解压
tar -zxvf apache-tez-0.10.3-bin.tar.gz
# 改名
mv apache-tez-0.10.3-bin tez-0.10.3

在hive/conf/hive_env.sh,增加如下配置:

export TEZ_HOME=/home/datahouse/tez-0.10.3
export TEZ_JARS=""
for jar in `ls $TEZ_HOME | grep jar`; do
    export TEZ_JARS=$TEZ_JARS:$TEZ_HOME/$jar
done
for jar in `ls $TEZ_HOME/lib`; do
    export TEZ_JARS=$TEZ_JARS:$TEZ_HOME/lib/$jar
done
#export HIVE_AUX_JARS_PATH=/opt/modules/hadoop/share/hadoop/common/hadoop-lzo-0.4.20.jar$TEZ_JARS
export HIVE_AUX_JARS_PATH=$TEZ_JARS

HIVE_AUX_JARS_PATH的配置不能少,不然hive启动时无法找到tez的包,这个配置变量就是用来加载hive以外的第三方包的。

在hive/conf下新建tez-site.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
        <property>
                <name>tez.lib.uris</name>
                <value>${fs.defaultFS}/tez/tez-0.10.3,${fs.defaultFS}/tez/tez-0.10.3/lib</value>
        </property>
        <property>
                <name>tez.lib.uris.classpath</name>
                <value>${fs.defaultFS}/tez/tez-0.10.3,${fs.defaultFS}/tez/tez-0.10.3/lib</value>
        </property>
        <property>
                <name>tez.use.cluster.hadoop-libs</name>
                <value>true</value>
        </property>
        <property>
                <name>tez.history.logging.service.class</name>
                <value>org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService</value>
        </property>
</configuration>

由于配置的是hdfs路径,需要将tez上传到hdfs上

su hadoop
# 在hdfs 文件系统中建 tez目录
hdfs dfs -mkdir /tez
# 上传 tez 到 建的目录上去
hdfs dfs -put /home/datahouse/tez-0.10.3 /tez

修改conf 下的 hive-site.xml配置:

<property>
    <name>hive.execution.engine</name>
    <value>tez</value>
</property>

重启hive 相关服务。报错如下:

在这里插入图片描述

日志jar包冲突,将tez 下的 日志包移除。

注意,hdfs上的也要移除。

重启hiveserver2,继续报错

2024-12-30 11:24:00: Starting HiveServer2
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs/BatchListingOperations
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:370)
        at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
        at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
        at org.apache.hadoop.fs.FileSystem.loadFileSystems(FileSystem.java:3289)
        at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:3334)
        at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:3373)
        at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:125)
        at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:3424)
        at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:3392)
        at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:485)
        at org.apache.hadoop.fs.Path.getFileSystem(Path.java:365)
        at org.apache.hadoop.hive.common.FileUtils.getJarFilesByPath(FileUtils.java:1319)
        at org.apache.hadoop.hive.conf.HiveConf.initialize(HiveConf.java:6565)
        at org.apache.hadoop.hive.conf.HiveConf.<init>(HiveConf.java:6447)
        at org.apache.hadoop.hive.common.LogUtils.initHiveLog4jCommon(LogUtils.java:96)
        at org.apache.hadoop.hive.common.LogUtils.initHiveLog4j(LogUtils.java:80)
        at org.apache.hive.service.server.HiveServer2.main(HiveServer2.java:1274)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:323)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:236)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.fs.BatchListingOperations
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 38 more

报错问题是找不到类,Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/hadoop/fs/BatchListingOperations

这类问题其实解决起来有个通用思路,类找不到,无非就是相关的jar包版本不匹配,导致在使用这个类的地方在对应的jar包里找不到。

通过错误栈可以得知:hiveserve2在启动时,调用了org.apache.hadoop.hive.common.FileUtils.getJarFilesByPath方法,该方法调用了org.apache.hadoop.fs.Path.getFileSystem方法继而执行到org/apache/hadoop/fs/BatchListingOperations找不到类了。去hive-common-4.0.jar包中找到了org.apache.hadoop.hive.common.FileUtils.getJarFilesByPath函数调用位置,在hive-common4.0.jar包下的pom文件中,看到了引用的hadoop-common的jar包,hive 安装目录下未找到该包,去hadoop安装目录下,找到了该包的hadoop-common-3.2.jar版本,查看源码,找不到org/apache/hadoop/fs/BatchListingOperations类,所以会报这个错误。下面将hadoop-common-3.2.jar换成了hadoop-common-3.3.jar版本,能找到org/apache/hadoop/fs/BatchListingOperations类,但是又报错找不到org/apache/hadoop/fs/LeaseRecoverable类,于是继续更换到hadoop-common-3.4.jar版本,能找到org/apache/hadoop/fs/LeaseRecoverable类。但是metastore服务启动又报缺jar包了。更换更新的包,但问题却越来越多了。这一切都是引入tez 后造成的,引入tez后,hive的执行逻辑需要hadoop的包,与实际环境中hadoop的包不匹配。经过搜索,找到了官网hive4.0版本下tez的配置。但是hadoop版本得升级到hadoop3.3.6。然后基于hadoop3.3.6去集成tez,替换hadoop的MR。

hive 4.0版本的tez集成

由于hive4.0 + hadoop 3.2.1版本的数仓在集成tez时,会引起hive 依赖包 和hadoop包的版本不匹配,所以在升级hadoop3.2.1到3.3.6后,按照官网教程配置tez。hadoop3.3.6版本升级参考【数据仓库】hadoop3.3.6 安装配置

版本搭配为hive 4.0 + hadoop 3.3.6+tez0.10.3

官网参考文档

https://hive.apache.org/docs/latest/manual-installation_283118363/

tez包的下载解压就不说了,按上文操作,下面直接讲配置:

tez 配置

# tez
export TEZ_HOME=/home/datahouse/tez-0.10.3
export PATH=$PATH:$TEZ_HOME/*:$TEZ_HOME/conf

conf/tez-site.xml文件增加配置(在tez安装目录下)

<configuration>
        <property>
                <name>tez.lib.uris</name>
                <value>${fs.defaultFS}/tez/tez-0.10.3,${fs.defaultFS}/tez/tez-0.10.3/lib</value>
        </property>
        <property>
                <name>tez.lib.uris.classpath</name>
                <value>${fs.defaultFS}/tez/tez-0.10.3,${fs.defaultFS}/tez/tez-0.10.3/lib</value>
        </property>
        <property>
                <name>tez.use.cluster.hadoop-libs</name>
                <value>true</value>
        </property>
        <property>
                <name>tez.history.logging.service.class</name>
                <value>org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService</value>
        </property>
</configuration>

这里tez.lib.uris配置了hdfs分布式文件系统上的路径,还要记得将相关的包传上去,参考上面的脚本。
etc/hadoop/hadoop-env.sh文件增加配置(在hadoop安装目录)

# tez
export TEZ_CONF=/home/datahouse/tez-0.10.3/conf
export TEZ_JARS=/home/datahouse/tez-0.10.3
export HADOOP_CLASSPATH=${TEZ_CONF}:${TEZ_JARS}/*:${TEZ_JARS}/lib/*:${HADOOP_CLASSPATH}

conf/hive-site.xml文件增加配置(在hive安装目录)

<configuration>
    <property>
        <name>hive.tez.container.size</name>
        <value>1024</value>
    </property>

    <property>
        <name>hive.execution.engine</name>
        <value>tez</value>
    </property>

    <property>
         <name>tez.lib.uris</name>
         <value>${fs.defaultFS}/tez/tez-0.10.3,${fs.defaultFS}/tez/tez-0.10.3/lib</value>
    </property>
    <property>
        <name>tez.configuration</name>
        <value>/home/datahouse/tez-0.10.3/conf/tez-site.xml</value>
    </property>

    <property>
        <name>tez.use.cluster.hadoop-libs</name>
        <value>true</value>
    </property>
</configuration>

启动hive相关服务,即可启动tez引擎。

测试验证

通过hivesql执行如下语句:

select count(*) from t_people where provice = '河南省' and age>30; 

使用MR执行时间为48 s 942 ms

切换到tez执行时间为13 s 449 ms

可见速度快了很多。

hive查询优化

在BI中连接hive ,即使使用了tez,在拖了2个图表时,再拖第三个时,数据加载就会变慢,甚至超时。下面对探究hive 配置优化。

<!--开启hive 并行执行能力-->
<property>
    <name>hive.exec.parallel</name>
    <value>true</value>
</property>
<!--设置tez任务的并行度-->
</property>
    <property>
    <name>tez.task.parallelism</name>
    <value>4</value>
</property>
<!--设置并行执行的线程数-->
 <property>
    <name>hive.exec.parallel.thread.number</name>
    <value>20</value>
</property>

​ 加上上述参数后,虽然不超时了,但查询依旧很慢,看来hive数仓在对接BI指标时速度还是不及mysql,因为指标表里都是计算好的指标数据,数据量并没有那么大的,要是接入BI,加载这么慢,那肯定是无法满足业务要求的。看来hive在作为数仓存储和分析数据后生成结果数据,在展示时还是得通过mysql表进行呈现。

经验

1 数仓相关的框架在搭建时,对每个组件的版本是有匹配要求的,否则会各种找不到类的错误;

2 使用组件配置遇到问题时,记得去官网找相关参考资料;

3 hive on Tez 模式可以提高hive数据处理分析的速度,但在BI场景加载速度还是不能满足要求;

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

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

相关文章

云备份项目--客户端编写

文章目录 10. 客户端工具类10.1 整体的类10.2 测试 11 客户端数据管理类11.1 整体的类11.2 测试 12. 客户端业务处理12.1 整体的类 完整的代码–gitee链接 10. 客户端工具类 10.1 整体的类 在windows平台下进行开发&#xff0c;Util.hpp实际上是客户端FileUtil.hpp和JsonUtil…

MySQL 的事务与多版本并发控制(MVCC)的那些事

什么是事务原子性:一致性隔离性 问题1: 为什么MySQL要使用mvcc实现隔离性而不使用 锁 解决并发问题?持久性 问题2: MySQL 不是磁盘数据库吗,持久化为什么是 redo log 保证的?问题 3: redo log 储存了什么东西,持久化(崩溃恢复是怎么做的?)问题 4 : MySQL 的 bing log (二进制…

Eplan 项目结构(高层代号、安装地点、位置代号)

Eplan中的项目结构分为3个层次&#xff1a; &#xff08;1&#xff09;功能面结构。指明这个系统的功能&#xff0c;有什么用途。在EPlan中&#xff0c;指的就是"高层代号&#xff08;&#xff09;"。 一般指的是线体。 &#xff08;2&#xff09;位置面结构。指明该…

OWASP ZAP之API 请求基础知识

ZAP API 提供对 ZAP 大部分核心功能的访问,例如主动扫描器和蜘蛛。ZAP API 在守护进程模式和桌面模式下默认启用。如果您使用 ZAP 桌面,则可以通过访问以下屏幕来配置 API: Tools -> Options -> API。 ZAP 需要 API 密钥才能通过 REST API 执行特定操作。必须在所有 …

短信通知在 IOS 17/18 中不起作用?这是修复方法

问题 “我最近将 iPhone 更新到了 iOS 17/18。我真的很兴奋&#xff0c;直到我发现 iOS 17/18 中没有 iMessage 文本通知。此后我的兴奋变成了失望。请告诉我如何解决这个问题&#xff1f; ” 我们知道这可能是一个大问题&#xff0c;因为我们通常不会打开消息应用程序&#…

从0开始的opencv之旅(1)cv::Mat的使用

目录 Mat 存储方法 创建一个指定像素方式的图像。 尽管我们完全可以把cv::Mat当作一个黑盒&#xff0c;但是笔者的建议是仍然要深入理解和学习cv::Mat自身的构造逻辑和存储原理&#xff0c;这样在查找问题&#xff0c;或者是遇到一些奇奇怪怪的图像显示问题的时候能够快速的想…

机场安全项目|基于改进 YOLOv8 的机场飞鸟实时目标检测方法

目录 论文信息 背景 摘要 YOLOv8模型结构 模型改进 FFC3 模块 CSPPF 模块 数据集增强策略 实验结果 消融实验 对比实验 结论 论文信息 《科学技术与工程》2024年第24卷第32期刊载了中国民用航空飞行学院空中交通管理学院孔建国, 张向伟, 赵志伟, 梁海军的论文——…

《Rust权威指南》学习笔记(二)

枚举enum 1.枚举的定义和使用如下图所示&#xff1a; 定义时还可以给枚举的成员指定数据类型&#xff0c;例如&#xff1a;enum IpAddr{V4(u8, u8, u8, u8),V6(String),}。枚举的变体都位于标识符的命名空间下&#xff0c;使用::进行分隔。 2.一个特殊的枚举Option&#xff0…

OSI模型的网络层中产生拥塞的主要原因?

&#xff08; 1 &#xff09;缓冲区容量有限&#xff1b;&#xff08; 1.5 分&#xff09; &#xff08; 2 &#xff09;传输线路的带宽有限&#xff1b;&#xff08; 1.5 分&#xff09; &#xff08; 3 &#xff09;网络结点的处理能力有限&#xff1b;&#xff08; 1 分…

linux上安装MySQL教程

1.准备好MySQL压缩包&#xff0c;并进行解压 tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar -C /usr/local 2.检查是否有mariadb数据库 rpm -aq|grep mariadb 关于mariadb:是MySQL的一个分支&#xff0c;主要由开源社区在维护&#xff0c;采用GPL授权许可 MariaDB的目…

R语言中的时间序列分析·

1 数据集说明 AirPassengers 1949~1960年每月乘坐飞机的乘客数 JohnsonJohnson Johnson&Johnson每股季度收入 nhtemp 康涅狄格州纽黑文地区从1912年至1971年每年的平均气温 Nile 尼罗河的流量 sunspots 1749年~1983年月平均太阳黑子数 2 相关包 xts、forecast、tser…

LookingGlass使用

背景 Looking Glass 是一款开源应用程序&#xff0c;可以直接使用显卡直通的windows虚拟机。 常见环境是Linux hostwindows guest&#xff0c;基本部署结构图&#xff1a; 编译 git clone --recursive https://github.com/gnif/LookingGlass.git编译client mkdir client/b…

HCIA-Access V2.5_7_3_XG(S)原理_关键技术

为什么需要测距 因为上行链路只有一根纤,而且每一个ONU到OLT的距离是不一样的,虽然上行通过TDMA技术,让每一个ONU在不同的时间段发送数据,但是仍然有可能在同一时刻到达分光器,产生数据冲突。 有测距的信元传输 所以为了避免碰撞冲突,通过ONU在注册的时候就会启动测距…

四、VSCODE 使用GIT插件

VSCODE 使用GIT插件 一下载git插件与git Graph插件二、git插件使用三、文件提交到远程仓库四、git Graph插件 一下载git插件与git Graph插件 二、git插件使用 git插件一般VSCode自带了git&#xff0c;就是左边栏目的图标 在下载git软件后vscode的git插件会自动识别当前项目 …

RISC-V学习笔记

1.RISC ISA1个基本整数指令集多个可选的扩展指令集&#xff0c;如RV32I表示支持32位整数指令集。I表示基本指令集&#xff0c;M表示整数乘法与除法指令集&#xff0c;A表示存储器原子指令集&#xff0c;F表示单精度浮点指令集&#xff0c;D表示双精度浮点指令集等&#xff0c;C…

strapi中使用Documentation插件

Swagger UI 自动生成并展示了 API 的文档&#xff0c;这些文档是根据 OpenAPI Specification (OAS) 格式编写的。它提供了对 API 端点、请求方法&#xff08;GET, POST, PUT, DELETE 等&#xff09;、参数、响应格式等详细信息的描述 安装 npm run strapi install documentat…

AI来帮忙:蛋白纯化不用慌

在当今生物学研究的前沿领域&#xff0c;从探索疾病的发病机制&#xff0c;到新型药物的研发&#xff0c;再到生物工程产品的制造&#xff0c;高纯度、高活性的蛋白质都是不可或缺的基石。 科研人员在蛋白纯化的征程中&#xff0c;时常被诸多难题困扰。一方面&#xff0c;生物…

SpringCloud系列教程:微服务的未来(六)docker教程快速入门、常用命令

对于开发人员和运维工程师而言&#xff0c;掌握 Docker 的基本概念和常用命令是必不可少的。本篇文章将带你快速入门 Docker&#xff0c;并介绍一些最常用的命令&#xff0c;帮助你更高效地进行开发、测试和部署。 目录 前言 快速入门 docker安装 配置镜像加速 部署Mysql …

基于单片机中药存放环境监测系统的实现

基于单片机中药存放环境监测系统的实现 项目开发背景 随着现代中药的广泛应用&#xff0c;中药材的存储环境对其质量有着至关重要的影响。温湿度、烟雾、火灾等环境因素&#xff0c;若不加以控制&#xff0c;将会导致中药材失效或变质。因此&#xff0c;设计一个基于单片机的…

casaos安装最新版homeassistant-arm

进入cosOS界面点自定义安装 Docker镜像:homeassistant/armv7-homeassistant Tag:2024.12.2 标题&#xff1a;Home Assistant 图片路径&#xff1a;https://cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStoremain/Apps/HomeAssistant/icon.png Web UI&#xff1a;http&…