【数据仓库】hive on Tez配置
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`; doexport TEZ_JARS=$TEZ_JARS:$TEZ_HOME/$jar
done
for jar in `ls $TEZ_HOME/lib`; doexport 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/BatchListingOperationsat 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.BatchListingOperationsat 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场景加载速度还是不能满足要求;
相关文章:
【数据仓库】hive on Tez配置
hive on Tez 搭建 前提是hive4.0hadoop3.2.2数仓已搭建完成,现在只是更换其执行引擎 为Tez。搭建可参考【数据仓库】hive hadoop数仓搭建实践文章。 Tez 下载 下载地址 https://archive.apache.org/dist/tez/ 官网地址 https://tez.apache.org/releases/apac…...
Kubernetes Gateway API-3-TLS配置
1 简介 Gateway API 允许使用多种方式配置 TLS。本文档列出了各种TLS设置,并给出了如何有效使用它们的一般指南。 尽管本文档涵盖了 Gateway API 最常见的TLS配置形式,但某些实现也可能提供特定于实现的扩展,允许不同或更高级形式的TLS配置。除此文档外,值得阅读你所使用…...
C++ 设计模式:原型模式(Prototype Pattern)
链接:C 设计模式 链接:C 设计模式 - 工厂方法 链接:C 设计模式 - 抽象工厂 链接:C 设计模式 - 建造者模式 原型模式(Prototype Pattern)是一种创建型设计模式,它允许一个对象通过复制现有对象来…...
计算机网络 (12)物理层下面的传输媒体
前言 计算机网络物理层下面的传输媒体是计算机网络设备之间的物理通路,也称为传输介质或传输媒介,并不包含在计算机网络体系结构中,而是处于物理层之下。 一、传输媒体的分类 导向型媒体:电磁波被导引沿着固体媒体传播。常见的导向…...
SpringCloud 系列教程:微服务的未来(三)IService接口的业务实现
本文将介绍 IService 接口的基本业务操作、复杂业务操作、Lambda 方法的使用以及批量增加操作,帮助开发者深入了解如何高效地利用 MyBatis-Plus 提供的功能进行数据库操作。无论是简单的单表查询,还是复杂的多表联动,甚至是大数据量的批量操作…...
测试带宽上行方法
测试宽带上行速度的软件有多种,以下是一些常见的选择: Speedtest 平台支持:iOS、Android、Windows、MacOS等 特点:全球知名的网络测速软件,测试结果准确,支持多平台。用户可以选择最近的服务器进行测试&am…...
天天跳绳(???)
广东省人民政府门户网站 https://www.gd.gov.cn/zwgk/zdlyxxgkzl/whjg/content/post... 二沙岛变身智能“运动岛” - 广东省人民政府门户网站 2020年10月20日 广州二沙岛,犹如一颗璀璨明珠点缀在珠江之心,自然风光旖旎,功能分区清 … 公共…...
module ‘django.db.models‘ has no attribute ‘FieldDoesNotExist‘
module ‘django.db.models’ has no attribute ‘FieldDoesNotExist’ xadmin报错 原因 django与xadmin版本不匹配。 django==3.2.7 xadmin-django==3.0.2解决方案 在xadmin/view/edit.py的388行改为 from django.core import exceptions if self.request_method ==...
智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之10 方案再探之1:特定于领域的模板 之1 随想交流
前面的项目再次不能继续。不得已再一次重新建了这个项目,并以当前修改版本的项目文件为附件开始了今天的沟通。所以 标明是“方案再探” 在新建这个项目的同时,就将项目文件作为附件添加进去,然后开始。 文件链接:智能工厂的设计…...
Excel将混乱的多行做成1列
前提:需要excel有textjoin函数,这个函数,根据百度说是在2016之后的版本才说,功能比较强大。 目标是将数据按从左到右,再从上到下排成一列。 公式法 首先用textjoin函数将文本包起来,做成一个超长文本。 然…...
Django项目部署到服务器
文章目录 django项目部署到服务器在服务器上安装Django和依赖:项目代码上传配置数据库收集静态文件配置Web服务器配置Gunicorn(WSGI服务器)启动/停止/重载systemd服务。 django项目部署到服务器 在服务器上安装Django和依赖: su…...
SpringBoot集成Flowable
一、工作流介绍 1、概念 通过计算机对业务流程的自动化管理。工作流是建立在业务流程的基础上,一个软件的系统核心根本上还是系统的业务流程,工作流只是协助进行业务流程管理。 解决的是:在多个参与者之间按照某种预定义的规则自动进行传递…...
大模型从零开始——预训练之分词 Tokenization
文章目录 一、概念介绍 二、单词级别分词 三、字符级别分词 四、子词级别分词 BPE/BBPE分词 BPE:Byte-Pair Encoding (BPE) BBPE:Byte-level BPE (BBPE) WordPiece分词 Unigram分词 五、总结 词元化(Tokenization)是数据预处…...
Python下载包缓慢时怎么修改镜像源
前言 在使用Python下载第三方包时,有时会比较缓慢,与Linux环境中下载软件一样可以替换软件源一样,Python下载源也可以进行修改,因为总是记不住镜像地址,特此记录一下。 常用镜像 豆瓣镜像: https://pypi.…...
每日一练 | 时延和抖动
01 真题题目 关于时延和抖动,下面描述正确的是(多选): A. 端到端时延等于处理时延与队列时延之和 B. 抖动是因为每个包的端到端时延不相等造成的 C. 抖动的大小跟时延的大小相关,时延小则抖动的范围也小,时…...
嵌入式开发之使用 FileZilla 在 Windows 和 Ubuntu 之间传文件
01-FileZilla简介 FileZilla 是一个常用的文件传输工具,它支持多种文件传输协议,包括以下主要协议: FTP (File Transfer Protocol) 这是 FileZilla 最基本支持的协议。FTP 是一种明文传输协议,不加密数据(包括用户名和…...
腾势D9风光不再?中期改款能否及时“救火”
文/王俣祺 导语:腾势D9销量下滑了,这背后是MPV市场的整体没落还是众多新车的围追堵截?如今2025款腾势D9也来了,“加量不加价”的新车又能否逆转乾坤,重夺MPV市场霸主的地位? 腾势D9销量下滑的“真相” 回…...
OpenCV-Python实战(11)——边缘检测
一、Sobel 算子 通过 X 梯度核与 Y 梯度核求得图像在,水平与垂直方向的梯度。 img cv2.Sobel(src*,ddepth*,dx*,dy*,ksize*,scale*,delta*,borderType*)img:目标图像。 src:原始图像。 ddepth:目标图像深度,-1 代表…...
【智行安全】基于Synaptics SL1680的AI疲劳驾驶检测方案
随著车载技术的快速进步,驾驶安全越来越受到重视,而疲劳驾驶是造成交通事故的重要原因之一。传统的驾驶监控技术因精度不足或反应迟缓,无法满足实时监测需求。因此,结合人工智能技术的疲劳驾驶检测系统成为行业新方向,…...
机器学习随机森林回归时间序列预模型中时间滑动窗口作用以及参数设置
一、时间序列模型中时间滑动窗口作用 在时间序列模型中,时间滑动窗口(Sliding Window)起到了至关重要的作用。它是一种常见且有效的数据表示技术,通过将时间序列数据分割成多个固定大小的窗口,来捕捉和分析数据中的模式…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
