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无法找到文件的异常。