亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

NameNode有什么用

發布時間:2021-12-30 10:22:33 來源:億速云 閱讀:210 作者:小新 欄目:云計算

小編給大家分享一下NameNode有什么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

一 NameNode的作用

     NameNode是文件系統的大腦,管理文件的命名空間以及對集群中文件的訪問,存儲著元數據。保存的最重要的兩個映射:文件名&數據塊(保存在磁盤上,持久化的)  ,數據塊&DateNode列表(NameNode不保存,是通過DataNode傳遞的)。

    NameNode 與客戶端,DataNode,NameNode之間都可以通信,分別通過實現ClientProtocol,DataNodeProtocol和NameNodeProtocol接口。

二 文件讀寫過程分析

   1 文件讀取過程

       首先客戶端使用FileSystem.open()函數打開文件,DistributedFileSystem使用RPC與NameNode通信,得到文件的數據塊信息,對于每一個數據塊,元數據返回的是保存該數據塊的數據節點的地址。

        然后DistributedFileSystem 返回FSDataInputStream 給客戶端用來讀取數據,客戶端調用Stream的read()方法開始讀取數據。

        DFSInputSteam連接保存此文件第一個數據塊的最近的數據節點,data從數據節點讀到客戶端,當數據塊讀取完畢,DFSInputStream關閉與此數據節點的連接,連接下一個數據塊的最近的數據節點。當所有節點讀取完畢,調用FSDataInputSteam的close函數關閉。

      在讀取過程中,如果客戶端在與數據節點的通信中,出現錯誤,則直接讀取下個節點,并將此節點記錄下來。

   2 文件寫入過程

      首先客戶端調用create()方法創建文件,DistributedFileSystem調用RPC與NameNode通信,傳達客戶端要新建一個文件,元數據節點檢查命名空間,確定文件原來不存在,并且客戶端有創建文件的權限,然后在創建文件。返回DFSOutputStream,使得客戶端寫入數據。

      DFSOutputStream 將數據分成塊,寫入data queue,因為數據的寫入是流式的,data queue 由Data Stream 讀取,并通知其他的數據塊(假設默認復制3塊),分配的數據節點放在一個pipeline里。

     Data Streamer將數據塊寫入pipeline中的第一個數據節點,第一個數據節點又將數據塊寫入第二個數據節點,第二個數據節點將數據寫入第三個數據節點。DFSOutput Stream為發出去的數據塊保存了ack queue,等待pipeline中的數據節點告知數據寫入成功。如果數據節點在寫入過程中失敗,關閉pipeline,將ack queue 中的數據塊放入data queue 的開始。失敗的數據節點從pipeline中移除,另外的數據塊則寫入pipeline中另外的兩個數據節點。元數據則被通知,復制塊數目不足,將會創建第三份備份。

   當客戶端結束寫入數據,則調用stream的close()函數

三   java API 對文件的基本操作

1 FileSystem類(開啟文件系統)

Configuration conf=new Configuration();//獲取配置信息
FileSystem fs=FileSystem.get(URI.create(uri),conf);//得到地址
InputStream input=null;
input=fs.open(new Path(uri));
IOUtils.copyBytes(input,System.out,4096,false);//讀取文件,打印出來
IOUtils.closeStream(input);

2 FileStatus類(查看文件狀態)

//查看HDFS中文件或者目錄的元信息。
FileStatus fstus=fs.getFileStatus(new Path(uri));
fstus.getPath();//得到文件路徑
fstus.getLen(); //得到文件長度
fstus.ModificationTime()//得到最新修改時間
fstus.getReplication()//得到文件備份樹
fstus.getOwner()//得到文件擁有者

3 BlockLocation(查看數據塊的位置)

//查找某個文件Block在HDFS集群的位置。
FileStatus fstus=fs.getFileStatus(new Path(uri));
BlockLocation []block=fs.getFileBlockLocations(fstus,0,fstus.getLen));

4 查看文件是否存在

//列出HDFS下的所有文件。檢查是否存在,使用exist()方法。
Path []paths=new Path[args.length];
FileStatus fstus=fs.listStatus(paths);
Path []listedPaths=FileUtil.stat2Paths(fstus);
for(Path p:listedPaths){
       System.out.println(p);
}

以上是“NameNode有什么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汤原县| 靖边县| 庆城县| 连云港市| 永善县| 新宾| 永济市| 搜索| 迭部县| 卢氏县| 东丽区| 呼图壁县| 南充市| 郎溪县| 洱源县| 阜阳市| 罗城| 故城县| 陵川县| 武汉市| 广州市| 怀集县| 长寿区| 永兴县| 古田县| 芜湖县| 武乡县| 万全县| 隆昌县| 永康市| 禄劝| 湘阴县| 含山县| 比如县| 荥阳市| 玉龙| 若尔盖县| 威海市| 永年县| 襄樊市| 嘉义县|