【数据仓库】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`; 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场景加载速度还是不能满足要求;

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

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

相关文章

finereport动态数据源插件教程2

场景&#xff1a; 模板中有多个数据集&#xff0c;只需要其中一个数据集按照不同的参数显示不同数据库的数据。 模板制作&#xff1a; 两个数据集ds1&#xff0c;ds2&#xff0c;ds1的绑定到参数面板的下拉框上&#xff0c;ds2显示到模板正文中&#xff0c;现在需要ds1根据不同…

Java通过谷歌邮箱Gmail直接发送邮件的三种方式

错误 Connected to the target VM, address: 127.0.0.1:52082, transport: socketException in thread "main" javax.mail.MessagingException: Got bad greeting from SMTP host: smtp.gmail.com, port: 587, response: [EOF] at com.sun.mail.smtp.SMTPTransp…

WSDM 2025 | 时间序列(time series)论文总结

AWSDM 2025于2025年3月10号到14号在德国汉诺威举行&#xff08;Hannover, Germany&#xff09; 本文总结了WSDM 2024有关时间序列&#xff08;time series&#xff09;的相关论文&#xff0c;如有疏漏&#xff0c;欢迎大家补充。&#xff08;没有时空数据相关的论文&#xff0…

反直觉导致卡关-迫击炮谜题

这个谜题&#xff0c;在两周目中先后卡了我至少三个小时&#xff0c;先后缓慢装填并发射迫击炮弹尝试了数百次。 一周目卡了很久&#xff0c;稀里糊涂的过了&#xff0c;想不到二周目还会卡那么久。 研究了很多播主的攻略&#xff0c;但还是一头雾水&#xff0c; 直到分析其…

庐山派K230学习日记4 PWM控制

1 本节介绍​ &#x1f4dd;本节您将学习如何通过将K230开发板的GPIO引脚复用为PWM功能并输出PWM信号&#xff1b;实现输出PWM信号及控制板载无源蜂鸣器发出声音。 &#x1f3c6;学习目标 1️⃣如何将GPIO引脚配置为PWM模式&#xff0c;通过40Pin排针中的部分引脚来输出PWM信号…

c语言的文件操作与文件缓冲区

目录 C语言文件操作函数汇总 简单介绍文件 为什么使用文件 什么是文件 文件名 二进制文件和文本文件 流和标准流 流 标准流 文件指针 文件的打开和关闭 文件的顺序读写 顺序读写函数介绍 文件的随机读写 fseek ftell rewind 文件读取结束的判定 文件缓冲区 缓…

嵌入式linux中socket控制与实现

一、概述 1、首先网络,一看到这个词,我们就会想到IP地址和端口号,那IP地址和端口各有什么作用呢? (1)IP地址如身份证一样,是标识的电脑的,一台电脑只有一个IP地址。 (2)端口提供了一种访问通道,服务器一般都是通过知名端口号来识别某个服务。例如,对于每个TCP/IP实…

Nginx:动静分离

什么是动静分离? 动静分离 是指将网站中的静态资源(如图片、样式表、脚本等)和动态内容(如 PHP、Python、Node.js 等后端生成的内容)分开部署和处理。这样做的好处是可以利用不同的服务器或缓存策略来优化不同类型的资源。 动静分离的好处 提高性能:静态资源可以直接从…

PADS Layout 差分线设计规则及其设计规则约束的详细过程步骤

一般我们的电路板有很多的差分线,有90欧姆的差分线,也有100欧姆的差分线,90欧姆的差分线主要是针对USB的差分线,特别是对于USB HUB的板子,那么我们就要设置差分线。一般我们设置差分线,一般要切换到Router里面来设置,如下所示: 那么设置差分对,一般要对原理图和Router…

计算机网络--路由表的更新

一、方法 【计算机网络习题-RIP路由表更新-哔哩哔哩】 二、举个例子 例1 例2

概述(讲讲python基本语法和第三方库)

我是北子&#xff0c;这是我自己写的python教程&#xff0c;主要是记录自己的学习成果方便自己日后复习&#xff0c; 我先学了C/C&#xff0c;所以这套教程中可能会将很多概念和C/C去对比&#xff0c;所以该教程大概不适合零基础的人。 it seems that python nowadays 只在人工…

redux用法总结

redux用法总结 目录 基本概念工作原理核心概念基本使用异步操作 Redux ThunkRedux Saga React 集成Redux Toolkit最佳实践 基本概念 什么是 Redux&#xff1f; Redux 是一个可预测的状态容器&#xff0c;用于管理 JavaScript 应用的状态。它遵循三个基本原则&#xff1a; …

Gitee上传项目代码教程(详细)

工具必备&#xff1a;Git Bash 上传步骤 1.在Gitee创建项目仓库 2.进入本地项目目录 右键打开Git Bash here 3.配置用户名和邮箱 如果之前给git配置过用户名和邮箱可跳过 查看Git是否配置成功&#xff1a;git config --list git config --global user.name "xxx"…

ARM CCA机密计算安全模型之安全生命周期管理

安全之安全(security)博客目录导读 目录 一、固件启用的调试 二、CCA系统安全生命周期 三、重新供应 四、可信子系统与CCA HES 启用 CCA&#xff08;机密计算架构&#xff09;的安全系统是指 CCA 平台的实现处于可信状态。 由于多种原因&#xff0c;CCA 启用系统可能处于不…

计算机视觉CV期末总复习

1.计算机视觉基础 数字图像表示 二值图像 仅包含黑白两种颜色的图像&#xff0c;只使用1个比特为&#xff08;0黑或1白&#xff09;表示 彩色图像&#xff1a;分不同的颜色空间 gray灰度图像 每个像素只有一个采样颜色&#xff0c;取值范围0--255&#xff0c;为8比特位&a…

web安全常用靶场

这里写自定义目录标题 phpstydy2018pikachuxss-labs phpstydy2018 网盘地址 提取码: nxnw ‌phpStudy是一款专为PHP开发者设计的集成环境工具&#xff0c;主要用于简化PHP开发环境的搭建过程。‌ 它集成了Apache、MySQL、PHP等核心组件&#xff0c;用户只需进行一次性安装&a…

每天40分玩转Django:Django实战 - 在线打印服务系统

Django实战 - 在线打印服务系统 一、系统功能概览表 模块主要功能技术要点文件上传PDF/Word文件上传、文件验证文件处理、MIME类型验证异步处理文件转换、打印队列Celery、Redis通知邮件打印状态通知、订单确认SMTP、邮件模板 二、系统架构设计 2.1 模型设计 # models.py …

WPS计算机二级•数据查找分析

听说这里是目录哦 通配符&#x1f30c;问号&#xff08;?&#xff09;星号&#xff08;*&#xff09;波形符&#xff08;~&#xff09; 排序&#x1f320;数字按大小排序以当前选定区域排序以扩展选定区域排序 文字按首字母排序 快速筛选分类数据☄️文字筛选数字筛选颜色筛选…

基于海思soc的智能产品开发(camera sensor的两种接口)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 对于嵌入式开发设备来说&#xff0c;除了图像显示&#xff0c;图像输入也是很重要的一部分。说到图像输入&#xff0c;就不得不提到camera。目前ca…

网安入门之MySQL后端基础

数据库 (Database) 数据库是指长期存储在计算机中的&#xff0c;有组织、可共享的数据集合。它通过表、列、行等结构来组织数据&#xff0c;目的是使数据可以高效存储、检索和管理。数据库通常包括多个表&#xff0c;每个表存储与特定主题或对象相关的数据 数据库管理系统 (D…