天天看點

HDFS概念及基本原理什麼是HDFS?簡略存儲流程HDFS的讀取流程

什麼是HDFS?

HDFS ----- Hadoop Distributed File System (hadoop 分布式檔案系統)

概念: 它是一個分布式叢集,可以支援海量資料存儲,hadoop架構的核心之一以及重要元件

基礎儲備

  1. 什麼是分布式?什麼是叢集? 叢集和分布式的差別?

    (獨立概念,分布式是用多台計算機并行解決不同問題、叢集是整合多台計算機解決相同問題)

  2. 什麼是主從模式?

    (分布式系統節點為主從關系、分布執行且保證資料一緻,相關概念:高可用模式、聯邦模式)

  3. 什麼是NameNode 、DataNode 、secondaryNameNode ,以及它們扮演的角色?

    (名稱節點控制作用、資料節點存儲作用、助理節點備份控制節點作用)

起源:

① 技術來源(基礎):Google 公司提出的三篇論文 之 GFS

② 需求來源(設想):提供一種較廉價的海量資料存儲的解決方案

實作過程:

a、解決海量資料存儲問題;—— 化整為零,搭建叢集進行分布式存儲   
b、存儲節點的管理問題;—— 采用分布式管理的主從模式(将資料分布情況放到主節點上)
           

注意事項:1.x的secondary隻做備份,屬于冷備份,需手動轉換namenode;2.x支援熱備,高可用HA特性,一個是active,一個是standby

c、解決存儲成本問題; —— 利用廉價PC來代替小型機或伺服器 搭建叢集

d、解決PC做叢集節點帶來機器故障問題; —— 副本備份,提供容錯(datanode資料)【從控制節點角度看,存在單點故障,即控制節點當機,整個存儲系統崩潰,2.x緩解了該問題】

e、節點故障快速檢測問題;——Fsimage與EditLog存儲以及心跳機制

f、 存儲節點故障優化問題;—— 将檔案分塊儲存在不同的機器上,解決存儲負荷,友善負載均衡與後面的副本管理(對應問題d);

g、減少分塊帶來的影響(尋址時間增加)——将資料塊設定成相同的,盡量将資料塊的大小加大,進而縮短尋址時間

h、解決大量大檔案存儲問題 ——将資料塊或存儲單元設定成較大容量,2.x由64M提高到128M

i、優化讀取或寫入效率 —— 機架政策(第2個政策提高容錯)、采用就近存儲或讀取

j、節點故障的應對措施 ——安全模式,停止會影響中繼資料的操作,防止新增資料丢失

k、緩解存儲節點壓力 ——負載均衡,資料存儲占比、副本遷移管理

HDFS概念及基本原理什麼是HDFS?簡略存儲流程HDFS的讀取流程

圖1-hdfs基本結構 (圖檔來源于網絡)

特點:

① 四大機制:心跳機制、機架政策、安全模式、負載均衡 (5、容錯恢複機制?)

② 優缺點(總結):

優點

a、廉價的海量存儲

b、高容錯性

c、存儲大量的大檔案

d、流式資料通路(大規模資料讀取)

e、跨平台

缺點

a、不适用于低延遲通路

b、不适用于大量小檔案

c、不支援檔案任意修改以及多使用者上傳

簡略存儲流程

  1. Step1

    用戶端 :通過hadoop的shell指令或Java Api來上傳檔案或下載下傳檔案的目标節點,可以在叢集内也可以在叢集外;邏輯分塊處理

    NameNode: 校驗用戶端請求(檔案路徑是否存在?檔案權限問題?資料節點是否正常)

    接收DateNode塊資訊,對應分塊資訊傳回節點清單(清單順序符合就近原則)

    DataNode:将塊資訊彙報給NameNode

  2. Step2

    用戶端:接收到清單,将資料塊依次存放到對應的DateNode

    DataNode: 接收通道中的資料塊,并将資料塊寫入到下一個副本節點通道;

    待該資料塊節點寫入完畢後,将資訊告知用戶端,準備下一次資料塊的請求

  3. Step3,傳回塊資訊到NameNode,更新NameNode;接收DateNode 資料,更新中繼資料

中繼資料管理

概念:什麼是中繼資料?它包含了:

① 檔案、目錄自身的屬性資訊;

② 檔案記錄的資訊的存儲相關的資訊(塊映射、存儲定位);

③ Datanode 資訊

流程:如何管理這些資料的?

持久化存放到磁盤(啟動時會加載到記憶體中,關閉時會自動載入到磁盤)

對象:fsimage 鏡像檔案、Edits 編輯日志(EditLog)

  • fsimage : 隻存放中繼資料的檔案屬性、檔案塊映射,并不包含塊對應的存儲位置(由datanode報告,該資訊存儲到記憶體中)
  • editLog : 存放的是 Hadoop 檔案系統的所有更改操作(檔案建立,删除或修改)的日志,用戶端操作會錄入到log中。

兩者關系:

fsimage 和 edits 檔案都是經過序列化的,在 NameNode 啟動的時候,它會将 fsimage檔案中的内容加載到記憶體中,之後再執行 edits 檔案中的各項操作,使得記憶體中的中繼資料和實際的同步,存在記憶體中的中繼資料支援用戶端的讀操作,也是最完整的中繼資料。

合并操作:SecondaryNameNode 對 fsimage 和 editLog進行合并操

  • 過程 Checkpoint :

    secondary 從namenode的fsimage 和 editlog進行下載下傳并加載到記憶體,此時,namenode生成一個新的editLog(edits.new),此時secondary 根據兩個檔案生成Fsimage.ckpt,最後複制到 namenode的 fsimage.

  • 作用:

    及時同步中繼資料内容,保證資料的一緻性

  • 特點:

    通過記憶體載入的方式加快讀取速度,通過定時持久化到磁盤保證資料的安全

HDFS的讀取流程

HDFS概念及基本原理什麼是HDFS?簡略存儲流程HDFS的讀取流程

HDFS的寫入流程

HDFS概念及基本原理什麼是HDFS?簡略存儲流程HDFS的讀取流程

HDFS的RPC機制

RPC的全稱為遠端過程調用,即hadoop底層通信是基于RPC協定的。解決的問題,控制遠端計算機,調用目标上的計算資源(記憶體、cpu等)

  • 地位:它屬于會話層協定(OSI網絡協定的第5層),其下層是基于TCP/IP,UDP協定。
  • 流程簡述: 生成一個代理agent 作為用戶端在目标機器上的本地使用者,實作類本地指令來操作目标計算機。如圖所示,stub是進行了序列化和反序列化操作。
    HDFS概念及基本原理什麼是HDFS?簡略存儲流程HDFS的讀取流程

圖3-RPC流程 圖檔來源于網絡

可以看成是四個部分組成:序列化層、函數調用層、網絡傳輸層和伺服器端處理

1)首先需要定義一個PRC協定,該接口必須繼承VersionedProtocol接口

2)需要一個類實作PRC的接口用于服務端的調用

3)實作用戶端和服務端

hadoop HDFS-RPC接口

HDFS概念及基本原理什麼是HDFS?簡略存儲流程HDFS的讀取流程

圖檔來源于網絡

protocol 解釋說明
ClientProtocol client和namenode 進行互動的接口;
namenode響應的操作,主要包括hdfs檔案讀寫的相關操作,hdfs命名空間,快照,緩存相關的操作。
讀取:擷取位置 getBlockLocations(),reportBadBlocks() 彙報錯誤的資料塊;
寫入:create()建立新檔案,addBlock()擷取新增塊位置,建立pipeline;
ClientDataNodeProtocol client和datanode進行互動的接口;
用戶端擷取datanode節點資訊,并非寫入資料接口;
DatanodeProtocol datanode和namenode進行互動的接口;
datanode則是通過該接口向namenode進行注冊,彙報塊資訊和緩存資訊;
① 握手versionRequest()主要是傳回namenode的一些命名空間ID,叢集ID,hdfs的版本号等,datanode收到資訊後進行校驗對比,判斷是否能夠與該namenode協同工作,能否注冊。
② datanode會定期的向namenode發送心跳
③ 塊彙報後會根據datanode上報資料塊存儲情況建立資料塊與datanode節點的對應關系。blockReport()在啟動的時候和指定時間間隔的情況下發生。cacheReport()和blockReport()方法完全一緻。隻不過是彙報目前datanode上的緩存的所有資料塊。
datanode會向namenode彙報損壞的資料塊,以及定期性namenode彙報datanode新接手的資料塊或者删除的資料塊。
InterDatanodeProtocol datanode和datanode間的接口,主要用于資料塊的恢複操作
NamenodePortocol 主要用于namenode的ha機制,或者單節點的情況下是secondaryNamenode也namenode之間的通信接口。

時間同步 rdate

rdate -s time.nist.gov

rdate -s time-a.nist.gov
           

繼續閱讀