您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)HDFS中exists函數(shù)的作用是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
/**
*/
public boolean exists(String src) throws IOException {
return namesystem.exists(new UTF8(src));//直接調(diào)用namesystem.
}
那下面我們來看看namesystem是如何來判斷的。
public boolean exists(UTF8 src) {
if (dir.getFile(src) != null || dir.isDir(src)) {
return true;//從這可以看到,要么確實存在,如果不存在且是目錄也可以。
} else {
return false;
}
}
先分析getFile(...)函數(shù)。
-----------------------------------------
public Block[] getFile(UTF8 src) {
waitForReady();
synchronized (rootDir) {
INode targetNode = rootDir.getNode(src.toString());//獲取節(jié)點
if (targetNode == null) {
return null;//節(jié)點不存在
} else {
return targetNode.blocks;//節(jié)點存在,返回文件塊信息
}
}
}
----------繼續(xù)分析getNode
INode getNode(String target) {
if (! target.startsWith("/") || target.length() == 0) {
return null;//路徑是否規(guī)范
} 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;//當(dāng)前INode的名字是否OK?
}
if (index == components.size()-1) {
return this;//已經(jīng)到了最后一個item
}
// Check with children
INode child = (INode) children.get(components.elementAt(index+1));//根據(jù)文件名從children中查找對應(yīng)INode,然后再遞歸查找
if (child == null) {
return null;
} else {
return child.getNode(components, index+1);
}
}
-------------好,然后分析isDir函數(shù)
public boolean isDir(UTF8 src) {
synchronized (rootDir) {
INode node = rootDir.getNode(normalizePath(src));
return node != null && node.isDir();
}
}
上述就是小編為大家分享的HDFS中exists函數(shù)的作用是什么了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。