【发布时间】:2011-01-13 22:24:50
【问题描述】:
我正在更改一个 hadoop 映射 - 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构建路径中,我为指定的libs添加了所有最新的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的某种库导出问题,但不知道如何找到它。
【问题讨论】:
标签: eclipse amazon-s3 hadoop jets3t