Hadoop2.7-在HDFS中创建目录的简单Java代码
我所要做的就是使用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.7Hadoop2.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
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.3Hi,谢谢您的回复。问题是为什么我会收到这个与AWS S3相关的错误消息,因为我的hadoop伪集群是本地的,我所做的只是使用java程序在HDFS中创建一个文件夹。我的Hadoop在Ubuntu 14的本地VM中。非常感谢Steve