Hadoop获取 FileSystem 实例

简介: Hadoop获取 FileSystem 实例

方式一:通过配置来获取fs对象

在 Java 中要想操作 HDFS,首先要获取一个客户端实例:



```Configurationconf=newConfiguration();
FileSystemfs=FileSystem.get(conf);
```

 因为我们的操作目标是 HDFS,所以这里获取到的 fs 对象应该是 DistributedFileSystem 的实例。


 那么,get 方法是从何处判断具体实例化哪种客户端类呢?

 --从 conf 中的一个参数 `fs.defaultFS` 的配置值判断。


 如果我们的代码中没有指定 `fs.defaultFS`,并且工程 classpath 下也没有给定相应的配置,conf 中的默认值就来自于 hadoop 的 jar 包中的 core-default.xml,默认值为file:///,此时获取的将不是一个 DistributedFileSystem 的实例,而是一个本地文件系统的客户端对象。


 完整示例如下所示:



```packagecom.hongyaa.hdfs;
importjava.io.IOException;
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.fs.FileSystem;
publicclassHDFSDemo {
publicstaticvoidmain(String[] args) throwsIOException {
Configurationconf=newConfiguration();
//如果我们没有给 conf 设置文件系统,那么 fileSystem 默认获取的是本地文件系统的一个实例//若是我们设置了“fs.defaultFS”参数,这表示获取的是该 URI 的文件系统的实例,就是我们需要的 HDFS 集群的一个 fs 对象conf.set("fs.defaultFS", "hdfs://localhost:9000");
FileSystemfs=FileSystem.get(conf);
System.out.println(fs.getUri());
    }
}
```


方式二:直接获取fs对象

packagecom.xiaowang.hdfs;
importjava.io.IOException;
importjava.net.URI;
importjava.net.URISyntaxException;
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.fs.FileSystem;
publicclassHDFSDemo {
publicstaticvoidmain(String[] args) throwsInterruptedException, URISyntaxException, IOException {
Configurationconf=newConfiguration();
// 不需要配置“fs.defaultFS”参数,直接传入URI和用户身份,最后一个参数是安装Hadoop集群的用户,我的是“root”FileSystemfs=FileSystem.get(newURI("hdfs://localhost:9000"), conf, "root");
System.out.println(fs.getUri());
    }
}















相关文章
|
分布式计算 Hadoop Java
hadoop第一个运行实例wordcount
hadoop第一个运行实例wordcount
118 0
|
分布式计算 Hadoop Java
|
分布式计算 Apache
|
分布式计算 Apache
|
Web App开发 分布式计算 前端开发
|
存储 分布式计算 Hadoop

相关实验场景

更多