## 對HDFS的初步認識
對HDFS的初步認識
.HDFS是Hadoop的三個核心元件之一,
其設計特點是1.適合T級別的大檔案或一大堆資料檔案的儲存.
2檔案分塊儲存,HDFS會將一個完整的大檔案平均分塊儲存到不同計算器上,它的意義在於讀取檔案時可以同時從多個主機取不同區塊的檔案,多主機讀取比單主機讀取效率要高得多得都。
3流式資料訪問,一次寫入多次讀寫且不支援動態改變檔案內容,要變化也只能在檔案末新增內容。
4用於廉價硬體上
5硬體故障,HDFS認為所有計算機都可能會出問題,為了防止某個主機失效讀取不到該主機的塊檔案,它將同一個檔案塊副本分配到其它某幾個主機上,如果其中一臺主機失效,可以迅速找另一塊副本取檔案。
HDFS的關鍵元素:
1、Block:將一個檔案進行分塊,通常是64M。
2、NameNode:儲存整個檔案系統的目錄資訊、檔案資訊及分塊資訊,這是由唯一 一臺主機專門儲存,當然這臺主機如果出錯,NameNode就失效了。在 Hadoop2.* 開始支援 activity-standy 模式----如果主 NameNode 失效,啟動備用主機執行 NameNode。
3、DataNode:分佈在廉價的計算機上,用於儲存Block塊檔案。
HDFS執行原理
1、NameNode和DataNode節點初始化完成後,採用RPC進行資訊交換,採用的機制是心跳機制,即DataNode節點定時向NameNode反饋狀態資訊,反饋資訊如:是否正常、磁碟空間大小、資源消耗情況等資訊,以確保NameNode知道DataNode的情況;
2、NameNode會將子節點的相關後設資料資訊快取在記憶體中,對於檔案與Block塊的資訊會通過fsImage和edits檔案方式持久化在磁碟上,以確保NameNode知道檔案各個塊的相關資訊;
3、NameNode負責儲存fsImage和edits後設資料資訊,但fsImage和edits後設資料檔案需要定期進行合併,這時則由SecondNameNode程式對fsImage和edits檔案進行定期合併,合併好的檔案再交給NameNode儲存。
、HDFS資料合併原理
1、NameNode初始化時會產生一個edits檔案和一個fsimage檔案,edits檔案用於記錄操作日誌,比如檔案的刪除或新增等操作資訊,fsImage用於儲存檔案與目錄對應的資訊以及edits合併進來的資訊,即相當於fsimage檔案在這裡是一個總的後設資料檔案,記錄著所有的資訊;
2、隨著edits檔案不斷增大,當達到設定的一個閥值的時候,這時SecondaryNameNode會將edits檔案和fsImage檔案通過採用http的方式進行復制到SecondaryNameNode下(在這裡考慮到網路傳輸,所以一般將NameNode和SecondaryNameNode放在相同的節點上,這樣就無需走網路頻寬了,以提高執行效率),同時NameNode會產生一個新的edits檔案替換掉舊的edits檔案,這樣以保證資料不會出現冗餘;
3、SecondaryNameNode拿到這兩個檔案後,會在記憶體中進行合併成一個fsImage.ckpt的檔案,合併完成後,再通過http的方式將合併後的檔案fsImage.ckpt複製到NameNode下,NameNode檔案拿到fsImage.ckpt檔案後,會將舊的fsimage檔案替換掉,並且改名成fsimage檔案。
通過以上幾步則完成了edits和fsimage檔案的合併,依此不斷迴圈,從而到達保證後設資料的正確性。
HDFS寫原理
1、HDFS客戶端提交寫操作到NameNode上,NameNode收到客戶端提交的請求後,會先判斷此客戶端在此目錄下是否有寫許可權,如果有,然後進行檢視,看哪幾個DataNode適合存放,再給客戶端返回存放資料塊的節點資訊,即告訴客戶端可以把檔案存放到相關的DataNode節點下;
2、客戶端拿到資料存放節點位置資訊後,會和對應的DataNode節點進行直接互動,進行資料寫入,由於資料塊具有副本replication,在資料寫入時採用的方式是先寫第一個副本,寫完後再從第一個副本的節點將資料拷貝到其它節點,依次類推,直到所有副本都寫完了,才算資料成功寫入到HDFS上,副本寫入採用的是序列,每個副本寫的過程中都會逐級向上反饋寫進度,以保證實時知道副本的寫入情況;
3、隨著所有副本寫完後,客戶端會收到資料節點反饋回來的一個成功狀態,成功結束後,關閉與資料節點互動的通道,並反饋狀態給NameNode,告訴NameNode檔案已成功寫入到對應的DataNode。
、HDFS讀原理
1、HDFS客戶端提交讀操作到NameNode上,NameNode收到客戶端提交的請求後,會先判斷此客戶端在此目錄下是否有讀許可權,如果有,則給客戶端返回存放資料塊的節點資訊,即告訴客戶端可以到相關的DataNode節點下去讀取資料塊;
2、客戶端拿到塊位置資訊後,會去和相關的DataNode直接構建讀取通道,讀取資料塊,當所有資料塊都讀取完成後關閉通道,並給NameNode返回狀態資訊,告訴NameNode已經讀取完畢。
相關文章
- 對LinkMapFile的初步認識
- Mybatis初步認識MyBatis
- 初步認識zookeeper
- Spring初步認識-(1)Spring
- 初步認識Apache IgniteApache
- 快速冪的初步認識(Java)Java
- 初步認識ida軟體
- 01MySQL的 庫、表初步認識MySql
- 低程式碼 —— 初步認識 AppsmithAPPMIT
- 初步認識 k8sK8S
- 網路報文初步認識
- 關於瀏覽器外掛的初步認識瀏覽器
- webpack 快速入門 系列 —— 初步認識 webpackWeb
- Workerman學習筆記(一)初步認識筆記
- Swift 網路請求 : Moya初步認識Swift
- 初步認識微前端(single-spa 和 qiankun)前端
- 前端學習 node 快速入門 系列 —— 初步認識 node前端
- 對CBM的一點認識
- 【轉】對#!bin/sh的認識
- 對深度學習的認識深度學習
- 【雜談】對CopyOnWriteArrayList的認識
- 對ajax、axios、fetch的認識iOS
- 【人生苦短,我學 Python】基礎篇——初步認識(Day1)Python
- Python學習 —— 初步認知Python
- SAP UI5 智慧控制元件 Smart Controls 的初步認識試讀版UI控制元件
- python 爬蟲對 scrapy 框架的認識Python爬蟲框架
- 我對CDN以及CDN加速的認識
- 【雜談】對IO與NIO的認識
- 對函式的初步瞭解函式
- 對高階函式的簡單認識函式
- 【雜談】對RMI(Remote Method Invoke)的認識REM
- 對軟體測試的認識誤區
- Mybatis學習-初步認知與使用MyBatis
- 說說你對自我認識邊界的理解
- 對於魔術方法__call,__callStatic 新的認識
- 對Array.prototype.map的一些認識
- 初鏈共識初步研究
- HDFS知識點總結