摘要:本文主要研究了HDFS文件系統的讀寫流程以及基於MRS在windows客戶端下讀寫HDFS文件的實現。
HDFS(Hadoop分佈式文件系統)是Apache Hadoop項目的一個子項目。java
HDFS支持海量數據的存儲,容許用戶把成百上千的計算機組成存儲集羣,其中的每一臺計算機稱爲一個節點。用戶經過HDFS的終端命令能夠操做其中的文件和目錄,如同操做本地文件系統(如Linux)中的文件同樣。用戶也能夠經過HDFS API或MapReduce來編程訪問其中的文件數據。node
本文主要研究了HDFS文件系統的讀寫流程以及基於MRS在windows客戶端下讀寫HDFS文件的實現。git
1. HDFS的架構和元數據
1.1 HDFS採用master/slaves主從結構模型管理數據,結構模型圖以下
1.2 元數據的相關概念
Fsimage:文件系統映射文件,也是元數據的鏡像文件(磁盤中),存儲某段時間namenode內存元數據信息github
Edits log:操做日誌文件編程
1.3 元數據的工做特色
- (1) namenode始終在內存中存儲元數據,使得「讀操做」更加快
- (2)寫請求時,向edits文件寫入日誌,成功返回後才修改內存,並向客戶端返回
- (3) NameNode內存中存儲的是=fsimage+edits
2. 文件的讀寫流程
2.1 文件的讀取流程
1) 客戶端Client調用FileSystem的open(),返回FSDataInputStream對象給客戶端.DistributeFileSystem對象經過RPC和NameNode通訊,查詢元數據信息,肯定文件路徑是否存在以及檢查權限,返回這個文件的數據塊位置列表(數據塊位置是有前後順序)windows
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成功返回.ide
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讀寫原理和代碼簡單實現》,原文做者:劍指南天 。