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

華為雲開發者社群發表於2021-01-12
摘要:本文主要研究了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主從結構模型管理資料,結構模型圖如下

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

1.2 後設資料的相關概念

Fsimage:檔案系統對映檔案,也是後設資料的映象檔案(磁碟中),儲存某段時間namenode記憶體後設資料資訊

Edits log:操作日誌檔案

1.3 後設資料的工作特點

  • (1) namenode始終在記憶體中儲存後設資料,使得“讀操作”更加快
  • (2)寫請求時,向edits檔案寫入日誌,成功返回後才修改記憶體,並向客戶端返回
  • (3) NameNode記憶體中儲存的是=fsimage+edits

2. 檔案的讀寫流程

2.1 檔案的讀取流程

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

1) 客戶端Client呼叫FileSystem的open(),返回FSDataInputStream物件給客戶端.DistributeFileSystem物件通過RPC和NameNode通訊,查詢後設資料資訊,確定檔案路徑是否存在以及檢查許可權,返回這個檔案的資料塊位置列表(資料塊位置是有先後順序)

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

3) 當資料讀取完畢後,呼叫FSDataInputStream物件的close()函式。

2.2 檔案的寫入流程

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

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非安全叢集

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

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

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

3.3 為叢集的各個節點繫結彈性ip

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

3.4 將彈性ip和叢集節點主機名寫入windows的hosts檔案

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

3.5 開啟https://github.com/huaweicloud/huaweicloud-mrs-example/tree/mrs-2.1,將樣例程式碼下載下來,然後是idea開啟hdfs-examples專案

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

3.6 在huawei下面建立test資料夾,並且Test.java檔案放到這個資料夾內

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

3.7 從叢集下載配置檔案,置於專案conf資料夾下

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

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

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

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

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

附件下載: 

Test.rar 1.06KB

文件.docx 455.30KB 

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

 

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

相關文章