Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse 导出jar文件后Hadoop抛出java.lang.VerifyError_Eclipse_Amazon S3_Hadoop_Jets3t - Fatal编程技术网

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

Eclipse 导出jar文件后Hadoop抛出java.lang.VerifyError,eclipse,amazon-s3,hadoop,jets3t,Eclipse,Amazon S3,Hadoop,Jets3t,我正在修改一个hadoop map-reduce作业,该作业目前编译并运行良好,无需修改 作为工作的一部分,我现在将连接到S3以交付一个文件 我开发了一个(非常简单的)s3Connector类,在eclipse中测试并运行它, 然后把它和我的工作联系起来。为了在hadoop中运行作业,我必须将项目导出为jar文件,然后从hadoop调用它。jar文件在eclipse中编译和导出似乎没有问题,但是当我在hadoop中运行它时,我得到了一个java.lang.VerifyError异常 java.l

我正在修改一个hadoop map-reduce作业,该作业目前编译并运行良好,无需修改

作为工作的一部分,我现在将连接到S3以交付一个文件

我开发了一个(非常简单的)s3Connector类,在eclipse中测试并运行它, 然后把它和我的工作联系起来。为了在hadoop中运行作业,我必须将项目导出为jar文件,然后从hadoop调用它。jar文件在eclipse中编译和导出似乎没有问题,但是当我在hadoop中运行它时,我得到了一个java.lang.VerifyError异常

java.lang.VerifyError: (class: com/extrabux/services/S3Connector, method: 
connectToS3 signature: ()V) Incompatible argument to function
其他几篇文章提到可能存在相互冲突的jar版本依赖关系,但在我的eclipse构建路径中,我为指定的LIB添加了所有最新的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 dir中的所有JAR上循环,并将它们物理地添加到它构建的最终执行命令行命令的类路径中。0.6.0JAR的这个命令行类路径覆盖了我在jar文件中导出的良好的0.8.0JAR。由于0.6.0版本没有为RestS3Service指定的构造函数,因此抛出了java.lang.VerifyError。通过从hadoop中删除0.6.0库,一切都很好。

当我升级到AWS时,我发现Amazon安装的hadoop使用了0.7.x库。。如果你正在使用亚马逊的hadoop,希望这也能有所帮助。我正在使用亚马逊的hadoop服务。我也有同样的问题,但即使我在lib/中删除了jets3t-0.6.0.jar,它仍然不起作用。我看到了你的评论。你的意思是我们应该使用0.7.0版而不是0.8.0版?