hive自定义函数缺包报错,以及运行时与hive冲突解决

news/2024/10/18 14:07:42/

一.问题描述

仅描述了从配置到打包上传的过程,想要看解决请直接跳到下文的对应模块。

在使用hive设置自定义函数的时候在pom.xml中配置如下依赖,使其打包的时候带依赖打包:

<dependencies><dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>3.1.2</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.3.1</version></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.0.0</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.50</version></dependency>
</dependencies>


<build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><artifactId>maven-assembly-plugin </artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><archive><manifest><mainClass>com.yunhe.UrlTransUdf</mainClass></manifest></archive></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins>
</build>

打包如下:

一个是纯代码的较小,而另一个较大的就是我们需要的带依赖的jar包。

打好的包放到hive的lib里然后尝试使用:

二.报错与解决

运行hive添加jar包,函数:

add jar /opt/installs/hive/lib/mymonth-1.0-SNAPSHOT-jar-with-dependencies.jar;
create temporary function hurl as 'org.bigdata.IpToLocation';

在虚拟机hive尝试:

发现报错如下,那根据报错可以看出jar包执行成功是我们的hivehadoop有问题,
那么是我们的jar包配置打包了hivehadoop的依赖,但是却在hive中执行时引起了冲突:

但是为了在编写java的时候却又需要使用这两个配置,比较的麻烦
那么在maven中依赖是有生命周期的,所以要通过这方面来入手:

A 依赖 B,需要在 A 的 pom.xml 文件中添加 B 的坐标,添加坐标时需要指定依赖范围,依赖范围包括:

compile:编译范围,指 A 在编译时依赖 B,此范围为默认依赖范围。编译范围的依赖会用在编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。

provided:provided 依赖只有在当JDK 或者一个容器已提供该依赖之后才使用, provided 依赖在编译和测试时需要,在运行时不需要,比如:servlet api 被tomcat 容器提供。

runtime:runtime   依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc 的驱动包。由于运行时需要所以runtime 范围的依赖会被打包。

test:test 范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用, 比如:junit。由于运行时不需要所以test 范围依赖不会被打包。

system:system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径,需要指定 systemPath 磁盘路径,system 依赖不推荐使用。

而我们的需求是编译需要,但是运行不需要以免与hive冲突,因此使用provided 

在pom.xml添加如下后重新加载打包并且上传:

 

再次运行即可成功!

但是注意:如果是在可视化软件运行那么需要重启hive!否则你的更改不会生效。


http://www.ppmy.cn/news/1540017.html

相关文章

递归——二叉树中的深搜

文章目录 计算布尔二叉树的值求根节点到叶节点数字之和二叉树剪枝验证二叉搜索树二叉搜索树中第 K 小的元素二叉树的所有路径 二叉树中的深搜有三种方法 前序遍历 根->左子树->右子树 中序遍历 左子树->根->右子树 前序遍历 左子树->右子树->根 计算布尔…

【人工智能】大模型的崛起为AI Agent注入了“聪明的大脑”,彻底改变了定义!

在人工智能的迅猛发展中&#xff0c;大模型的崛起为AI Agent注入了“聪明的大脑”&#xff0c;彻底改变了其定义。如今&#xff0c;基于大模型的AI Agent架构已成为企业应用大模型的首选方案。本文将深入探讨AI Agent的构建、框架选择及其在实际应用中的重要性&#xff0c;帮助…

PCL 点云配准-4PCS算法(粗配准)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 加载点云数据 2.1.2 执行4PCS粗配准 2.1.3 可视化源点云、目标点云和配准结果 2.2完整代码 三、实现效果 3.1原始点云 3.2配准后点云 PCL点云算法汇总及实战案例汇总的目录地址链接…

前端开发学习(一)VUE框架概述

一、MVC模式与MVVM模式 1.1mvc模式 MVC模式是移动端应用广泛的软件架构之一&#xff0c;MVC模式将应用程序划分为3部分:Model(数据模型)、View(用户界面视图)和Controller(控制器)。MVC模式的执行过程是将View层展示给用户&#xff0c;也就是通过 HTML页面接受用户动作&#…

SaaS 为小型企业带来的十大优势

软件即服务&#xff08;SaaS&#xff09;已被各种规模的企业所采用。最近&#xff0c;我们可以清楚地看到 SaaS 为小企业带来的显著好处。如果没有 SaaS&#xff0c;中小企业将无法在竞争中生存。 但在云计算中&#xff0c;SaaS 究竟是什么呢&#xff1f;为什么小企业应该关注…

影视制作中心15个工作站同时用Adobe Premiere处理25个4K视频流

对于4K非编人员来说&#xff0c;高分辨率视频编辑卡顿令人抓狂。但素材越来越多&#xff0c;项目越来越大&#xff0c;如何避免卡顿问题&#xff1f; 要知道影视制作过程中对后端存储的性能与容量有较高要求。我们测试在4K非编环境里&#xff0c;10-15台工作站同时运行Adobe P…

基于单片机的一种蜂鸣器的简易控制

有源和无源这里的“源”不是指电源&#xff0c;而是指震荡源。也就是说&#xff0c;有源蜂鸣器内部带震荡源&#xff0c;所以只要一通电就会叫。而无源内部不带震荡源&#xff0c;所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。有源蜂鸣器往往比无源的贵&#x…

在Linux操作系统上安装NVM教程——CentOS 7/VMware 17版

目录 一、测试网络是否能上网 二、下载阿里云镜像 三、解决执行yum命令出现报错&#xff08;没有就跳过&#xff09; 四、下载NVM安装包 五、解压NVM安装包 六、安装Node 七、连接新的动态库 八、升级GLIBC版本 九、安装GCC 十、查看当前服务器CentOS版本 一、测试网…