日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDFS的exists函数解析

發布時間:2025/3/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDFS的exists函数解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

在上傳一個文件時,需要判斷文件是否存在于HDFS中,這是通過向namenode節點發請求得到的。

那么,namenode如何判斷一個文件是否存在于文件系統中呢?

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

/**

?????*/

????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();

????????}

????}

這個就比較簡單了,直接查看INode的block是否為NULL.

---從以上代碼能分析出哪些結論?

1每個INode有個name

2 成員Block[] blocks記錄了文件的塊位置信息,如果沒有則是目錄

3 子INode信息存在TreeMap中,映射關系是(name,INode).

好,為后續分析提供了堅實的基礎!

轉載于:https://my.oschina.net/qiangzigege/blog/357591

總結

以上是生活随笔為你收集整理的HDFS的exists函数解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。