1. 程式人生 > >HDFS1.X架構和HDFS2.X架構

HDFS1.X架構和HDFS2.X架構

HDFS1.X的架構從邏輯空間上可以分為兩層。
Namespace 和 Block Storage Service;
  其中,Namespace 層面包含目錄、檔案以及塊的資訊,支援對Namespace相關檔案系統的操作,如增加、刪除、修改以及檔案和目錄的展示;
  而Block Storage Service層面又包含兩個部分:
  ①Block Management(塊管理)維護叢集中DataNode的基本關係和資料塊資訊,它支援資料塊相關的操作,如:建立資料塊,刪除資料塊等,同時,它也會管理副本的複製和存放。
  ②Physical Storage(物理儲存)儲存實際的資料塊並提供針對資料塊的讀寫服務。
  當前HDFS架構只允許整個叢集中存在一個Namespace,而該Namespace被僅有的一個NameNode管理。這個架構使得HDFS非常容易實現,但是,它(見上圖)在具體實現過程中會出現一些模糊點,進而導致了很多侷限性(下面將要詳細說明),當然這些侷限性只有在擁有大叢集的公司,像baidu,騰訊等出現。
  這裡寫圖片描述


  
  Hadoop1.x的HDFS架構的侷限:
(1)Block Storage和namespace高耦合
當前namenode中的namespace和block management的結合使得這兩層架構耦合在一起,難以讓其他服務單獨使用資料塊儲存功能。
(2)NameNode擴充套件性
HDFS的底層儲存是可以水平擴充套件的(解釋:底層儲存指的是datanode,當叢集儲存空間不夠時,可簡單的新增機器已進行水平擴充套件),但 namespace不可以。當前的namespace只能存放在單個namenode上,而namenode在記憶體中儲存了整個分散式檔案系統中的元資料 資訊,這限制了叢集中資料塊,檔案和目錄的數目。
(3)NameNode效能
由於HDFS檔案的讀寫等流程都涉及與Namenode的互動,所以檔案系統的吞吐量受限於單個Namenode的處理能力。
(4)隔離性
Namenode作為檔案系統的中心節點,無法做到資料的有效隔離。
這裡寫圖片描述

考慮到以上缺點,HDFS2.X架構提供了HDFS Federastion功能。
在Hadoop2.x中,HDFS的變化主要體現在增強了NameNode的水平擴充套件(Horizontal Scalability)及高可用性(HA), 可以同時部署多個NameNode,這些NameNode之間是相互獨立,也就是說他們不需要相互協調,DataNode同時在所有NameNode中注 冊,作為他們共有的儲存節點,並定時向所有的這些NameNode傳送心跳塊使用情況的報告,並處理所有NameNode向其傳送的指令。該架構如圖2所 示:
這裡寫圖片描述

該架構引入了兩個新的概念:儲存塊池(Block Pool) 和名稱空間卷

(namespaceVolume);
  ①一個塊池(black pool)由屬於同一個名稱空間的所有資料塊(資訊)組成,這個塊池中的資料塊可以儲存在叢集中的所有Datanode上,而每個Datanode都可以儲存叢集中所有塊池的資料塊。Block Pool的管理相互之間是獨立的。這意味著一個Namespace可以獨立的生成塊ID,不需要與其他Namespace協調。一個NameNode失敗 不會導致Datanode的失敗,這些Datanode還可以服務其他的Namenode。
 ②一個Namespace和它的Block Pool一起稱作名稱空間卷(Namespace Volume)。這是一個自包含單元。當一個NameNode/Namespace刪除後,對應的Block Pool也會被刪除。當叢集升級時,每個Namespace Volume也會升級。
 這裡寫圖片描述
  (2)HDFS Federation與老HDFS架構的比較
①支援Namenode/Namespace的水平擴充套件,同時為應用程式和使用者提供了名稱空間卷級別的隔離性。
②Federation架構實現起來比較簡單,Namenode的實現並不需要太大的改變,只需要更改部分Datanode程式碼即可。

Federation的出現為HDFS架構提供了新的可能,在未來我們可以將BlockStorage抽象成一個新的層次,HDFS Namespace將使用Block Storage層的功能來儲存資料塊。
在BlockStorage層中,每個塊池都是一個獨立的資料塊集合,塊池在管理上與其他塊池獨立,相互之間不需要協調。Datanode則提供共享儲存功能,儲存塊池的資料塊。Datanode會定期向BlockStorage層註冊併發送心跳,同時會為每個塊池傳送塊彙報。BlockStorage層會向Datanode傳送資料塊管理命令,之後Datanode會執行這些管理命令,例如資料塊的複製、刪除等。

分離出Block storage層會帶來以下優勢:
1.解耦合Namespace管理以及Block Storage管理。
2.其他應用可以直接繞過namenode/Namespace直接管理資料塊,例如Hbase等應用可以直接使用Block Storage層。
3.可以在Block Storage上構建新的檔案系統(非HDFS)。
4.使用分離的Block Storage層為分散式名稱空間的實現提供了基礎。

在HDFS2.X架構中,還多了HA(高可用),可以看我寫過的文章。

Hadoop2.X相比較於Hadoop1.x來說,HDFS的架構與MapReduce的都有較大的變化,且速度上和可用性上都有了很大的提高,Hadoop2.X中有兩個重要的變更:
(1)HDFS的NameNode可以以叢集的方式佈署,增強了NameNodes的水平擴充套件能力和高可用性,分別是:HDFS Federation與HA;
(2)MapReduce將JobTracker中的資源管理及任務生命週期管理(包括定時觸發及監控),拆分成兩個獨立的元件,並更名為YARN(Yet Another Resource Negotiator);

關於Mapreduce和yarn框架將在以後的文章詳述。