hadoop fileStatus 返回不包含hdfs://namenode:port的路径
时间: 2023-07-10 20:15:55 浏览: 160
demo-hdfs:HDFS Java API示例代码
如果你使用的是 `FileStatus` 类的 `getPath()` 方法获取文件路径,那么在 HDFS 中返回的路径格式应该是 `hdfs://<namenode>:<port>/<path>`,而在本地文件系统中返回的路径格式应该是 `file:///path` 或 `file:/path`。
如果你使用 `FileStatus` 类的 `getPath().toUri().getPath()` 方法获取文件路径,那么返回的路径将不包含 `hdfs://namenode:port` 或 `file://` 前缀,只包含文件路径本身。这是因为 `toUri().getPath()` 方法只返回 URI 的路径部分,并去掉了协议部分。
下面是一个示例代码,演示如何获取 HDFS 文件和本地文件的路径:
```java
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
public class FileStatusExample {
public static void main(String[] args) throws IOException, URISyntaxException {
// HDFS 文件路径
String hdfsPath = "hdfs://namenode:port/user/hadoop/example.txt";
// 本地文件路径
String localPath = "file:///home/user/example.txt";
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(new URI(hdfsPath), conf);
// 获取 HDFS 文件状态
Path hdfsFile = new Path(hdfsPath);
FileStatus hdfsStatus = fs.getFileStatus(hdfsFile);
System.out.println("HDFS 文件路径:" + hdfsStatus.getPath()); // hdfs://namenode:port/user/hadoop/example.txt
System.out.println("HDFS 文件路径(不包含前缀):" + hdfsStatus.getPath().toUri().getPath()); // /user/hadoop/example.txt
// 获取本地文件状态
Path localFile = new Path(localPath);
FileStatus localStatus = fs.getFileStatus(localFile);
System.out.println("本地文件路径:" + localStatus.getPath()); // file:/home/user/example.txt
System.out.println("本地文件路径(不包含前缀):" + localStatus.getPath().toUri().getPath()); // /home/user/example.txt
fs.close();
}
}
```
阅读全文