我正在更改一个 hadoop 映射 - 减少当前编译和运行良好的作业,无需我的更改。
作为工作的一部分,我现在将连接到 S3 以传递文件。
我开发了一个(非常简单的)s3Connector 类,在 Eclipse 中测试并运行它,然后将它挂接到我的 reduce 工作中。为了在 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构建路径中,我为指定的库添加了所有最新的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中的某种库导出问题,但不知道如何找到它。