自定义hive udf函数遇到okhttp3引起的ExceptionInInitializerError

文章讨论了在使用自定义HiveUDF时遇到的Okhttp3初始化错误,原因是jar包中的版本冲突。作者提供了通过dependencyanalyzer排除多余版本,并使用maven-shade-plugin重命名okhttp3和okio包以解决Spark环境中的冲突的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题分析

问题:自定义hive udf执行运行udf函数出现错误。主要原因是okhttp3无法进行初始化
在这里插入图片描述在这里插入图片描述
排查问题的思路:okhttp3包冲突或者版本引起的

可能性分析:

  1. jar包中多版本冲突,idea中使用dependency analyzer分析。如果存在多个版本,exclude多余的版本。
  2. 运行环境中存在okhttp3冲突,比如我这边出现的主要原因:udf使用spark运行,运行环境中存在okhttp3导致冲突,解决方案:使用maven-shade-plugin将本地引用的okhttp3包重新命名。例如:
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-shade-plugin</artifactId>
                 <version>3.2.4</version>
                 <configuration>
                     <shadedClassifierName>shaded</shadedClassifierName>
                     <shadedArtifactAttached>true</shadedArtifactAttached>
                     <relocations combine.children="append">
                         <relocation>
                             <pattern>okhttp3</pattern>
                             <shadedPattern>test.okhttp3</shadedPattern>
                         </relocation>
                         <relocation>
                             <pattern>okio</pattern>
                             <shadedPattern>test.okio</shadedPattern>
                         </relocation>
                     </relocations>
                 </configuration>
                 <executions>
                     <execution>
                         <phase>package</phase>
                         <goals>
                             <goal>shade</goal>
                         </goals>
                     </execution>
                 </executions>
             </plugin>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值