Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop2.7-在HDFS中创建目录的简单Java代码_Java_Hadoop_Mapreduce - Fatal编程技术网

Hadoop2.7-在HDFS中创建目录的简单Java代码

Hadoop2.7-在HDFS中创建目录的简单Java代码,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我所要做的就是使用Java编程在HDFS中创建一个目录。 我得到了这个错误。 主线程java.util.ServiceConfigurationError:org.apache.hadoop.fs.FileSystem:Provider org.apache.hadoop.fs.s3a.S3AFileSystem中出现异常无法实例化 原因:java.lang.NoClassDefFoundError:com/amazonaws/AmazonServiceException 原因:java.lan

我所要做的就是使用Java编程在HDFS中创建一个目录。 我得到了这个错误。 主线程java.util.ServiceConfigurationError:org.apache.hadoop.fs.FileSystem:Provider org.apache.hadoop.fs.s3a.S3AFileSystem中出现异常无法实例化

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

不知道这些亚马逊S3是从哪里来的。请帮忙

这是密码。这是Hadoop2.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();

}
}

您似乎缺少了一些与使用S3文件系统相关的依赖性。为了使用它,您需要在集群中部署aws java sdk JAR。您可以从下载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>

啊,这是一个在不久前修复的bug,它与java服务API和类路径有关。Hadoop 2.7.2在JAR中枚举所有可用的文件系统实现类,由于暂时的类路径问题,在这里失败


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

Hi,谢谢您的回复。问题是为什么我会收到这个与AWS S3相关的错误消息,因为我的hadoop伪集群是本地的,我所做的只是使用java程序在HDFS中创建一个文件夹。我的Hadoop在Ubuntu 14的本地VM中。非常感谢Steve