在hdfs中创建目录的简单java代码

ezykj2lf  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(385)

我所要做的就是用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();

}
}
x8diyxa7

x8diyxa71#

啊,这是hadoop-12636中修复的一个bug,它与java服务api和类路径有关。hadoop2.7.2在jar中枚举所有可用的文件系统实现类,由于类路径问题而失败。
如果您从cp中删除hadoopawsjar,这将消失,或者只是升级到hadoop2.7.3

zf9nrax1

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中:

<!-- 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>

相关问题