2013年5月22日星期三

ViewFS in hadoop

  ViewFS对于federation这种多namespace具有很好的操作性,省却了用户设置scheme这种繁琐的行为,十分方便。
     相关的类:
     INodeTree<T>     抽象类,实际的实现类需要实现getTargetFileSystem方法,泛型中的T是FileSystem类。
     内部实现有:
     root,根节点,挂载的根节点
  abstract static class INode<T> {
    final String fullPath; // the full path to the root
    public INode(String pathToNode, UserGroupInformation aUgi) {
      fullPath = pathToNode;
    }
  };
  类似于FSNameSystem中的INode。INode两个子类,一个是INodeDir,一个是INodeLink。
  static class MountPoint<T> {
    String src;
    INodeLink<T> target;
    MountPoint(String srcPath, INodeLink<T> mountLink) {
      src = srcPath;
      target = mountLink;
    }

  }
MountPoint实际上就是一个映射,mount name --->  filesystem+scheme。
     ViewFS继承自AbstractFileSystem,同RawLocalFileSystem和DistributedFileSystem一样。ViewFS中有一个INodeTree实例。其实INodeTree所有的挂载行为都是通过conf传递的,我们遇到的一个test case没有通过的问题,即TestFSMainOperationsLocalFileSystem无法跑过就是因为挂载点通过conf传递不正确,导致后续无法进行test。
     ViewFS用到的conf有:
     fs.viewfs.mounttable.default.link.$LINK     $PATH
     fs.viewfs.mounttable.homedir.$HOME     $HOME

     前者是挂载的位置,后者是挂载的home,出问题时候大多去检查一下conf,尤其是抛出ViewFS resolve无法找到文件的异常。

没有评论:

发表评论