导出jar文件后Hadoop抛出java.lang.VerifyError

我正在改变一个hadoop地图 - 减少当前编译的工作,并且在没有我的更改的情况下运行正常。 作为工作的一部分,我现在将连接到S3以提供文件。 我开发了一个(非常简单的)s3Connector类,在eclipse中测试并运行它, 然后把它挂进我的减少工作。为了在hadoop中运行作业,我必须将项目导出为jar文件,然后从hadoop调用它。 jar文件似乎在没有问题的情况下编译和导出,但是当我在hadoop中运行它时,我得到一个java.lang.VerifyError异常。
java.lang.VerifyError: (class: com/extrabux/services/S3Connector, method: 
connectToS3 signature: ()V) Incompatible argument to function
其他几篇文章提到可能存在冲突的jar版本依赖项,但在我的eclipse构建路径中,我添加了指定库的所有最新jar文件,并将它们推送到构建路径顺序的顶部。 这很简单,我可以把它分离到:
import org.jets3t.service.impl.rest.httpclient.RestS3Service;
import org.jets3t.service.security.AWSCredentials;

public class S3Connector {

protected RestS3Service s3Service;
protected AWSCredentials awsCredentials;


public S3Connector()
{
    this.awsCredentials= new AWSCredentials("my secret 1", "my secret 2");
}


public void connectToS3() throws Exception
{
    this.s3Service = new RestS3Service(this.awsCredentials);
}  

}
即使是那个简单的类也会死...同样的消息。只要我在构造函数和RestS3Service中注释掉AWS凭据,问题就会消失。基本上,我认为这是eclipse中的某种库出口问题,但不确定如何找到它。     
已邀请:
想出这个。在hadoop lib目录中有一个旧版本的jets3t jar hadoop命令行脚本遍历lib目录中的所有jar,并将它们物理地添加到它构建的最终exec'ed命令行命令的类路径中。 0.6.0 jar的这个命令行类路径覆盖了我在jar文件中导出的好的0.8.0 jar。由于0.6.0版本没有RestS3Service的指定构造函数,因此抛出了java.lang.VerifyError。通过从hadoop中删除0.6.0 lib,一切都很顺利。     

要回复问题请先登录注册