新來的運維這樣用HDFS,CIO都懵了···


摘要:本文主要研究了HDFS文件系統的讀寫流程以及基於MRS在windows客戶端下讀寫HDFS文件的實現。

HDFS(Hadoop分布式文件系統)是Apache Hadoop項目的一個子項目。

HDFS支持海量數據的存儲,允許用戶把成百上千的計算機組成存儲集群,其中的每一台計算機稱為一個節點。用戶通過HDFS的終端命令可以操作其中的文件和目錄,如同操作本地文件系統(如Linux)中的文件一樣。用戶也可以通過HDFS API或MapReduce來編程訪問其中的文件數據。

本文主要研究了HDFS文件系統的讀寫流程以及基於MRS在windows客戶端下讀寫HDFS文件的實現。

1. HDFS的架構和元數據

1.1 HDFS采用master/slaves主從結構模型管理數據,結構模型圖如下

1.2 元數據的相關概念

Fsimage:文件系統映射文件,也是元數據的鏡像文件(磁盤中),存儲某段時間namenode內存元數據信息

Edits log:操作日志文件

1.3 元數據的工作特點

  • (1) namenode始終在內存中存儲元數據,使得“讀操作”更加快
  • (2)寫請求時,向edits文件寫入日志,成功返回后才修改內存,並向客戶端返回
  • (3) NameNode內存中存儲的是=fsimage+edits

2. 文件的讀寫流程

2.1 文件的讀取流程

1) 客戶端Client調用FileSystem的open(),返回FSDataInputStream對象給客戶端.DistributeFileSystem對象通過RPC和NameNode通信,查詢元數據信息,確定文件路徑是否存在以及檢查權限,返回這個文件的數據塊位置列表(數據塊位置是有先后順序)

2) 客戶通過FSDataInputStream read()方法讀取數據.FSDataInputStream對象按照數據塊位置優先順序建立一條連接,讀取數據.當此數據塊讀取完畢后,FSDataInputStream對象關閉和此數據節點的連接,然后繼續按照優先順序建立下一個數據塊連接,讀取數據…….在據讀取過程中,如果客戶端在與數據節點通信時出現錯誤,則會嘗試讀取包含有此數據塊的下一個數據節點,並且失敗的數據節點會被記錄,以后不會再連接

3) 當數據讀取完畢后,調用FSDataInputStream對象的close()函數。

2.2 文件的寫入流程

1)客戶端Client調用FileSystem的create()函數,返回FSDataOutputStream對象給客戶端DistributedFileSystem對象通過RPC與namenode通信,確定文件存在不存在以及是否有創建文件的權限,先將操作寫入log,再載入內存,將DataNode列表返回

2) 客戶端通過FSDataOutputStream對象,寫數據.FSDataOutputStream對象將數據按照128M分成塊,寫入Data Queue.然后將DataNode列表和Data Queue通過DataNode列表一同發送給最近的DataNode.這樣之后client端和NameNode分配的多個DataNode構成pipeline管道.client每次向第一個DataNode寫入一個packet,這個packet便會直接在pipeline里傳給第二個、第三個DataNode.每個DataNode寫完一個塊后,會返回確認信息. FSDataoutputStream將確認信息保存在ACK Queue.所有的數據塊寫入pipeline中的數據節點,並且ACK Queue成功返回.

3) FSDataOutputStream對象close()方法關閉流.通知元數據節點寫入完畢

3. 基於華為雲MRS windows下讀寫HDFS的實現

3.1 創建2.1.0非安全集群

3.2 安全組規則入方向放開windows 客戶端ip和所有端口

3.3 為集群的各個節點綁定彈性ip

3.4 將彈性ip和集群節點主機名寫入windows的hosts文件

3.5 打開https://github.com/huaweicloud/huaweicloud-mrs-example/tree/mrs-2.1,將樣例代碼下載下來,然后是idea打開hdfs-examples項目

3.6 在huawei下面創建test文件夾,並且Test.java文件放到這個文件夾內

3.7 從集群下載配置文件,置於項目conf文件夾下

3.8 將下面配置配置於hdfs-site.xml中

<property>
    <name>dfs.client.use.datanode.hostname</name>
    <value>true</value>
</property>

3.9 idea執行程序,執行結果如下

附件下載: 

Test.rar 1.06KB

文檔.docx 455.30KB 

本文分享自華為雲社區《HDFS讀寫原理和代碼簡單實現》,原文作者:劍指南天 。

 

點擊關注,第一時間了解華為雲新鮮技術~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM