私は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クレデンシャルをコメントアウトするとすぐに、問題は解消されます。基本的に、それは日食からのある種のライブラリエクスポートの問題だと思いますが、それを見つける方法がわかりません。