加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Oozie继续在classpath中添加旧版本的httpcore jar

发布时间:2020-12-15 01:04:54 所属栏目:Java 来源:网络整理
导读:我一直得到一个例外,因为Oozie在classpath中添加了一个错误版本的httpcore jar.我尝试了不同的选择,比如 oozie.launcher.mapreduce.task.classpath.user.precedenceoozie.launcher.mapreduce.user.classpath.first oozie.launcher.mapreduce.task.classpath.

我一直得到一个例外,因为Oozie在classpath中添加了一个错误版本的httpcore jar.我尝试了不同的选择,比如

oozie.launcher.mapreduce.task.classpath.user.precedence
oozie.launcher.mapreduce.user.classpath.first

oozie.launcher.mapreduce.task.classpath.user.precedence完全没有响应,当我使用oozie.launcher.mapreduce.user.classpath.first时,应用程序甚至无法加载一个类.

在类路径中,我可以看到两个版本的http-core.

httpcore-4.4.1.jar
httpcore-4.2.4.jar

当应用程序以独立模式运行时,我没有得到该异常.

例外:

    Failing Oozie Launcher,Main class [org.apache.oozie.action.hadoop.JavaMain],main() threw exception,java.lang.NoSuchFieldError: INSTANCE
org.apache.oozie.action.hadoop.JavaMainException: java.lang.NoSuchFieldError: INSTANCE
    at org.apache.oozie.action.hadoop.JavaMain.run(JavaMain.java:59)
    at org.apache.oozie.action.hadoop.LauncherMain.run(LauncherMain.java:47)
    at org.apache.oozie.action.hadoop.JavaMain.main(JavaMain.java:35)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.oozie.action.hadoop.LauncherMapper.map(LauncherMapper.java:236)
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.NoSuchFieldError: INSTANCE
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.

Oozie客户端构建版本:4.2.0.2.3.2.0-2950

任何帮助表示赞赏.

最佳答案
我们在HortonWorks发行版2.3.2中遇到了这个令人讨厌的问题(对它们感到羞耻):

> Oozie“启动器”工作总是得到httpcore和httpclient
CLASSPATH作为Hadoop客户端的一部分
> Oozie“启动器”工作总是得到httpcore和httpclient
捆绑在“Oozie”ShareLib中
> Hive / Hive2 Sharelibs包含一个httpcore和httpclient
更新版本
>从Hadoop的角度来看,user.classpath.first适用于两者
ShareLibs因此每次获得正确订单的几率为50/50
JAR(整体上有25/75的机会)

底线:我们必须

>从“Oozie”ShareLib HDFS中删除httpcore和httpclient
dir(呃!)
>为依赖于Hive JARS的所有操作提升oozie.launcher.mapreduce.job.user.classpath.first标志(即Hive操作,Hive2操作,以某种方式调用JDBC驱动程序的Shell操作等)

Post-scriptum – Oozie服务器在内存中保存每个ShareLib中的JAR列表,以便在服务器运行时删除JAR将触发新作业中的错误.如果您不想停止Oozie服务器,那么更新实时ShareLib的“正确方法”是(a)在新的带时间戳的目录中创建新版本[查看文档…]和( b)告诉服务器使用oozie admin -sharelibupdate重新同步新的库

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读