hdfs中的绝对路径,就比较简单,就是类似/a/b/c/xxx这样的,就是从根目录开始,通过这个名字找到文件(目录),这个Linux的绝对路径是一样的概念。

由于我们并不会像操作Linux文件系统一样cd到hdfs的某个目录下,于是,hdfs中一般来说没有“当前目录”的概念(用fuse或者NFS情况除外)。于是一个hadoop fs -ls a/b/c/xxx这样的访问,就是“相对于hdfs上的当前用户目录”而说的相对路径。因此,如果你用一个叫XYZ的用户访问a/b/c/xxx的时候,前面就要拼上用户目录的前缀,就是/user/XYZ/a/b/c/xxx了(前面这个home目录的前缀“/user”其实也可以通过自行定义dfs.user.home.dir.prefix这个配置指定个别的)。

可以参考DistributedFileSystem.java中的实现。这个类的open(Path f, final int bufferSize)方法中,有如下的实现:

public FSDataInputStream open(Path f, final int bufferSize)
      throws IOException {
    statistics.incrementReadOps(1);
    Path absF = fixRelativePart(f);
    return new FileSystemLinkResolver<FSDataInputStream>() {

这里面的fixRelativePart方法就是将一个相对路径转换成绝对路径的地方。

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐