HDFS-2.x之Federation:基本原理、優缺點、解決方案
整體思路是一個掛載表,指明哪些路徑實際指向哪個nn(或ns)。
掛載表配置在客戶端,如果客戶端發現路徑shcema是viewfs,就按照掛載表將請求定向到實際的nn。
架構如下:
dn通過BlockPoolManager將請求路由到各ns對應的BPOfferService上;再通過BPOfferService與具體的ns(如上圖NN-1)通訊(與具體的nn的則是BPServiceActor)。
優缺點(簡要版)
HDFS 2.x Federation使用了客戶端掛載的方案,核心的優缺點也在客戶端掛載上。
優點:
- 負載在客戶端,對nn完全沒有影響
- 實現簡單
壞處:
- 維護成本高,每次修改掛載表,都必須手動同步配置檔案
- 人工維護負載均衡,不能隨業務變化
缺點(詳細版)
- 掛載表的缺點 :掛載點的訪問含義不明:
- 由於HDFS客戶端原有的機制,一個DFSClient只對應一個nameservice,所以一次路徑處理不能轉為多個nameservice的多次RPC。
- 對於跨掛載點的讀操作,只根據掛載配置返回假結果
- 對於跨掛載點的寫操作(rename等)操作,會丟擲異常
- 客戶端掛載的缺點 :客戶端掛載維護成本高,一旦修改了掛載表,必須及時更新所有客戶端的配置檔案,否則用老的掛載邏輯寫nn,後果可能非常嚴重。
- 基於配置的負載均衡的缺點 :如果負載發生變化,人工修改延遲較高。
- 目前實現的缺點 :目前的掛載功能非常弱:
- 如果一個路徑聲明瞭掛載,那麼其同級目錄都需要進行掛載
- 如果一個路徑聲明瞭掛載,那麼其子路徑不能再宣告掛載
- HDFS Federation物理上沒有合併叢集的缺點:如果要跨ns修改掛載邏輯,則需使用DistCp將資料從一個ns拷貝到另一個ns。實際上兩個ns通常共享所有dn,拷貝造成了極大的浪費。
- 引入viewfs的缺點:HDFS路徑的scheme需要變為viewfs,而viewfs和其他scheme互不相容。例如,將fs.defaultFS的配置從
hdfs://ns1/
變為viewfs://ns/
,則hdfs:///test
會因未指定ns丟擲異常。