簡體   English   中英

Hadoop 2.7-在HDFS中創建目錄的簡單Java代碼

[英]Hadoop 2.7 - Simple Java code to create directory in HDFS

我所要做的就是以編程方式使用Java在HDFS中創建目錄。 我收到此錯誤。 線程“主”中的異常java.util.ServiceConfigurationError:org.apache.hadoop.fs.FileSystem:提供程序org.apache.hadoop.fs.s3a.S3AFileSystem無法實例化

引起原因:java.lang.NoClassDefFoundError:com / amazonaws / AmazonServiceException引起原因:java.lang.ClassNotFoundException:com.amazonaws.AmazonServiceException

不知道所有這些Amazon S3都在這里到達的。 請幫忙。

這是代碼。 這是Hadoop 2.7

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();

}
}

嗯,這是前一段時間在HADOOP-12636中修復的錯誤,該錯誤與Java服務API和類路徑有關。 Hadoop 2.7.2枚舉了JAR中所有可用的文件系統實現類,並且由於瞬時類路徑問題而在此處失敗。

如果從CP中刪除hadoop-aws JAR,它將消失,或者只是升級到Hadoop 2.7.3

似乎您缺少與使用S3文件系統有關的某些依賴性。 為了使用它,您需要在群集中部署aws java sdk jar。 您可以從http://sdk-for-java.amazonwebservices.com/latest/aws-java-sdk.zip下載aws-java-sdk。 然后,您需要解壓縮它,並將aws-java-sdk / lib /和aws-java-sdk / third-party /中的每個jar復制到您的datanodes。

另一個選擇是創建uber 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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM