當客戶機要讀取數據的時候,要從NameNode中讀取Metadata元數據信息。元數據信息保存在NameNode內存中和磁盤中。因為內存中保存是為了查詢速度,磁盤中保存是為了安全,因為內存中存儲的不安全。
元數據存儲細節
-
元數據
類似于倉庫中的賬本,描述著物品的描述信息。
image.png - 如何判斷該文件是否損壞
一個文件的每一塊擁有一個值,校驗和。具體過程是:從datanode中讀取一個塊信息,可以得到一個校驗值。這個值和元數據中保存的值比較,如果不同就判斷為損壞。
NameNode
- 整個文件系統的管理節點。
維護著整個文件系統餓文件目錄樹。
文件/目錄的元信息和每個文件對應的數據塊列表。
接收用戶的操作請求 - NameNode中主要包括一下文件
- fsimage:元數據鏡像文件。就是將內存中的元數據信息保存到磁盤,需要的時候就再從磁盤讀取出來到內存。Hadoop1,Hadoop2偽分布式沒有和內存中保持實時同步。
- edits:操作日志文件
- fstime:保存最后一次的還原點時間
- NameNode工作特點
- NameNode始終在內存中保存metadata,用于處理用戶的"讀請求"
- “寫請求”時,namenode會在寫入的時候,向edits文件寫日志。文件上傳成功后,才會修改內存中的元數據信息。先后順序,是指edits文件和內存中的先后
- Hadoop會維護一個fsimage文件,但是該文件不會隨時和namenode內存中的metadata保持一致,而是每隔一段時間才會合并edits文件來更新內容。
SecondaryNameNode就是用來合并fsimage和edits文件來更新NameNode中的metadata
DataNode
如果130M的數據,會被分成2塊。但是第二塊并不會給分配128M空間。
Secondary NameNode(集群中是沒有的)
Secondary NameNode不是NameNode的熱備。當NameNode宕機,并不會作為替補。Secondary NameNode僅僅是NameNode的工作助理。
- 執行過程
從NameNode中得到fsimage和edits,合并,然后生成新的fsimage,在本地保存,并返回給NameNode