微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HDFS中exists函数的作用是什么

这期内容当中小编将会给大家带来有关HDFS中exists函数的作用是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

/**

     */

    public boolean exists(String src) throws IOException {

        return namesystem.exists(new UTF8(src));//直接调用namesystem.

    }

 那下面我们来看看namesystem是如何来判断的。

public boolean exists(UTF8 src) {

        if (dir.getFile(src) != null || dir.isDir(src)) {

            return true;//从这可以看到,要么确实存在,如果不存在且是目录也可以。

        } else {

            return false;

        }

    }

先分析getFile(...)函数

-----------------------------------------

public Block[] getFile(UTF8 src) {

        waitForReady();

        synchronized (rootDir) {

            INode targetNode = rootDir.getNode(src.toString());//获取节点

            if (targetNode == null) {

                return null;//节点不存在

            } else {

                return targetNode.blocks;//节点存在,返回文件块信息

            }

        }

    }

 ----------继续分析getNode

INode getNode(String target) {

            if (! target.startsWith("/") || target.length() == 0) {

                return null;//路径是否规范

            } else if (parent == null && "/".equals(target)) {

                return this;//是否为根目录

            } else {

                Vector components = new Vector();

                int start = 0;

                int slashid = 0;

                while (start < target.length() && (slashid = target.indexOf('/', start)) >= 0) {

                    components.add(target.substring(start, slashid));

                    start = slashid + 1;

                }

                if (start < target.length()) {

                    components.add(target.substring(start));

                }

                return getNode(components, 0);//开启递归查找模式

            }

        }

 ---------

 INode getNode(Vector components, int index) {

            if (! name.equals((String) components.elementAt(index))) {

                return null;//当前INode的名字是否OK?

            }

            if (index == components.size()-1) {

                return this;//已经到了最后一个item

            }

            // Check with children

            INode child = (INode) children.get(components.elementAt(index+1));//根据文件名从children中查找对应INode,然后再递归查找

            if (child == null) {

                return null;

            } else {

                return child.getNode(components, index+1);

            }

        }

-------------好,然后分析isDir函数

public boolean isDir(UTF8 src) {

        synchronized (rootDir) {

            INode node = rootDir.getNode(normalizePath(src));

            return node != null && node.isDir();

        }

    }

上述就是小编为大家分享的HDFS中exists函数的作用是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程之家行业资讯频道。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐