我所要做的就是用java编程在hdfs中创建一个目录。我得到这个错误。线程“main”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
不知道这些亚马逊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();
}
}
2条答案
按热度按时间x8diyxa71#
啊,这是hadoop-12636中修复的一个bug,它与java服务api和类路径有关。hadoop2.7.2在jar中枚举所有可用的文件系统实现类,由于类路径问题而失败。
如果您从cp中删除hadoopawsjar,这将消失,或者只是升级到hadoop2.7.3
zf9nrax12#
似乎您缺少了一些与使用s3文件系统相关的依赖性。为了使用它,您需要在集群中部署awsjavasdkjar。您可以从下载aws java sdkhttp://sdk-for-java.amazonwebservices.com/latest/aws-java-sdk.zip. 然后您需要解压它,并将aws java sdk/lib/和aws java sdk/third-party/中的每个jar复制到您的datanodes。
另一种选择是创建uber jar,并通过maven将此依赖关系直接包含到jar中: