2017-02-18 5 views
0

私が試みているのは、プログラムでJavaを使用してHDFSにディレクトリを作成することです。 このエラーが発生しています。スレッド内 例外は、 "メイン" java.util.ServiceConfigurationError:org.apache.hadoop.fs.FileSystem:java.langで:プロバイダorg.apache.hadoop.fs.s3a.S3AFileSystemはによって引き起こさHadoop 2.7 - HDFSでディレクトリを作成するための簡単なJavaコード

をインスタンス化することができませんでした。 NoClassDefFoundErrorが:にjava.lang.ClassNotFoundException:COM/amazonaws/AmazonServiceException はによって引き起こされるこれらすべてのアマゾンS3がここに来たところcom.amazonaws.AmazonServiceException

はわかりません。助けてください。

ここにコードがあります。これはHadoopです。

package tas.module1; 


import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 

import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.BlockLocation; 
import org.apache.hadoop.fs.FSDataInputStream; 
import org.apache.hadoop.fs.FSDataOutputStream; 
import org.apache.hadoop.fs.FileStatus; 
import org.apache.hadoop.fs.FileSystem; 
import org.apache.hadoop.fs.Path; 


public class JavaClient { 

public JavaClient() { 

} 

public static void main(String[] args) throws IOException { 

    JavaClient jc = new JavaClient(); 
    Configuration config = new Configuration(); 
     config.addResource(new Path("/usr/local/hadoop-2.7.1/etc/hadoop/core-site.xml")); 
     config.addResource(new Path("/usr/local/hadoop-2.7.1/etc/hadoop/hdfs-site.xml")); 

     config.set("fs.hdfs.impl", 
       org.apache.hadoop.hdfs.DistributedFileSystem.class.getName() 
      ); 
      config.set("fs.file.impl", 
       org.apache.hadoop.fs.LocalFileSystem.class.getName() 
      ); 
     FileSystem dfs = FileSystem.get(config); 
     String dirName = "TestDirectory"; 
     System.out.println(dfs.getWorkingDirectory() +" this is from /n/n"); 
     Path src = new Path(dfs.getWorkingDirectory()+"/"+dirName); 

     dfs.mkdirs(src); 



System.out.println("created dir"); 

    dfs.close(); 

} 
} 

答えて

0

S3ファイルシステムの操作に関連するいくつかの依存関係が欠落しているようです。そのためには、クラスタにaws java sdk jarをデプロイする必要があります。 aws-java-sdkはhttp://sdk-for-java.amazonwebservices.com/latest/aws-java-sdk.zipからダウンロードできます。次に、解凍​​して、aws-java-sdk/lib /とaws-java-sdk/third-party /のすべてのjarをデータノードにコピーする必要があります。

別のオプションは、ユーバーjarを作成し、Mavenのを通して、あなたのjarファイルに直接この依存関係を含めることです。

<!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk --> 
<dependency> 
    <groupId>com.amazonaws</groupId> 
    <artifactId>aws-java-sdk</artifactId> 
    <version>1.11.91</version> 
</dependency> 
+0

Hiにアップグレードし、ご返信用 感謝します。 なぜこのAWS S3関連のエラーメッセージが表示されるのですか?私のhadoop疑似クラスタはローカルであり、私が試みているのは、Javaプログラムを使用してHDFSにフォルダを作成することです。 私のHadoopはUbuntu 14のローカルVMにあります。 – Suri

1

ああ、これはバグでは、JavaサービスAPIに関連するバックHADOOP-12636でしばらく、固定してありますクラスパス。 Hadoop 2.7.2は、JARの利用可能なファイルシステム実装クラスをすべて列挙しており、クラスパスの一時的な問題のためにここでは失敗します。

あなたはCPからのHadoop-AWS JARをドロップした場合、これは離れて行くか、単にHadoopの2.7.3

+0

ありがとうスティーブ – Suri

関連する問題