我在java中有一个使用spark和hbase的应用程序。我们需要点击部署在tomcat(泽西岛)的网址。所以,我们使用resteasy客户端来做到这一点。
当我执行一个独立的java代码来使用rest-easy命中url时 客户端,它工作正常
但是,当我在另一个使用spark进行某些处理的应用程序中使用相同的代码时,它会抛出错误,如标题所示。 我在eclipse中使用maven作为构建工具。构建它之后,我正在创建一个可运行的jar并选择选项"将所需的库提取到生成的jar"中。为了执行应用程序,我使用命令:
nohup spark-submit --master yarn-client myWork.jar myProperties 0&
rest-easy客户端代码的依赖关系:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-client</artifactId>
<version>3.0.11.Final</version>
</dependency>
</dependencies>
我无法弄清楚在编译期间,它不会抛出任何错误,但在运行时,虽然jar中包含了每个库(包括spark和hbase),但它会抛出错误,说不方法。请帮忙。
答案 0 :(得分:2)
尝试更改resteasy-client的版本,但事实并非如此 救命。在编译期间我可以看到类,如何在运行时它 缺少
可能的原因可能是原因
1)如果您使用的是maven范围可能是provided
。这样你的罐子就不会被复制到你的发行版了。
您已经提到的上述配置排除了这一点。
2)您没有从执行脚本指向正确的位置,可能是shell脚本。
3)你没有通过--jars
选项或--driverclasspath --executorclasspath
等传递此jar ...
我怀疑问题是由于第二或第三个原因。
另请查看https://spark.apache.org/docs/1.4.1/submitting-applications.html
编辑:
问题:spark-submit --conf spark.driver.extraClassPath =冲浪/ javax.ws.rs-API-2.0.1.jar:冲浪者/ Jersey的客户端 - 2.25.jar:冲浪者/ Jersey的共2.25.jar:冲浪者/ HK2-API-2.5。 0-b30.jar:冲浪者/ Jersey的番石榴2.25.jar:冲浪者/ HK2-utils的-2.5.0-b30.jar:冲浪者/ HK2定位器-2.5.0-b30.jar:冲浪者/ javax.annotation- API-1.2.jar artifact.jar againHere.csv
现在它引发了不同的异常:线程“main”中的异常 java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava /郎/字符串;)Ljavax / WS / RS /型芯/ UriBuilder; 我也尝试过搜索Response $ Status $ Family课程 在类路径中的某个地方而不是我提供的东西。我用过 命令grep响应$ Status $ Family.class /opt/mapr/spark/spark-1.4.1/lib/*.jar我发现火花也有 这个班。可能是这个问题。但如何有力地告诉 jvm在运行时使用我提供的类而不是spark的类, 我不知道!你能帮忙吗?
由于您在类路径中提供了外部jar
由于您使用的是1.4.1,请参阅configuration options
spark.executor.userClassPathFirst false
(实验)相同 功能如spark.driver.userClassPathFirst,但适用于 执行者实例。
spark.driver.userClassPathFirst false
(实验)是否给予 用户添加的jar在加载类时优先于Spark自己的jar 在司机。此功能可用于缓解冲突 Spark的依赖关系和用户依赖关系之间。它目前是一个 实验特征。这仅在群集模式下使用。可以使用 告诉框架