【问题标题】:Hadoop 2.7 - Simple Java code to create directory in HDFSHadoop 2.7 - 在 HDFS 中创建目录的简单 Java 代码
【发布时间】:2017-07-07 21:20:32
【问题描述】:

我正在尝试使用 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();

}
}

【问题讨论】:

    标签: java hadoop amazon-s3 mapreduce


    【解决方案1】:

    啊,这是不久前在HADOOP-12636 中修复的一个错误,它与 java 服务 API 和类路径有关。 Hadoop 2.7.2 枚举了 JAR 中所有可用的文件系统实现类,但由于临时类路径问题而在此处失败。

    如果您从 CP 中删除 hadoop-aws JAR,这将消失,或者只是升级到 Hadoop 2.7.3

    【讨论】:

      【解决方案2】:

      您似乎缺少一些与使用 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 复制到你的数据节点。

      另一种选择是创建 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>
      

      【讨论】:

      • 您好,感谢您的回复。问题是我收到此 AWS S3 相关错误消息的原因是因为我的 hadoop 伪集群是本地的,而我所尝试的只是使用 java 程序在 HDFS 中创建一个文件夹。我的 Hadoop 在 Ubuntu 14 的本地 VM 中。
      猜你喜欢
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多