最近幾天,hadoop官方社群發布了2.9.0版本,這也是第乙個2.9開頭的小版本。相比較於之前的2.8版本,2.9版本中新增了不少新功能特性。其中關於hdfs模組的乙個重要功能是hdfs router federation(基於路由的federation)。有人可能好奇,這個功能與目前hdfs支援的federation功能有什麼區別呢?一句話簡單的來講,就是之前federation是通過多namespace的方式,然後通過viewfs的方式在客戶端維護乙份掛載表,然後在邏輯上是同乙個集群位址。這裡筆者特意點出了客戶端這3個字,因為是在客戶端做路由分析,所以對於使用者來說很不方便使用和維護,一旦未來對映關係需要做更改的時候。相比於老federation+viewfs的方式,router federation則是在hdfs內部增加了軟體層來幫我們做請求路由。本文筆者就來簡單聊聊這個軟體層的路由是怎麼實現的。
想較於viewfs通過在客戶端維護掛載表資訊,router federation是真正做到了對客戶端的完全透明。因為這部分對映資訊將會被額外的儲存下來,還會持久化出去。這個模組我們姑且稱之為狀態維護(state maintenance)的模組。另外還有乙個重要的部分是請求**模組,這裡我們稱之為request forward。
以上2個模組構成了hdfs新的federation軟體層的設計。在這層軟體結構以下,就是各個子集群。每個子集群會與federation軟體層,進行資訊互動。結構圖如下:
針對router federation軟體層的各個模組,都對應的乙個新的服務角色。比如,請求**模組對應的角色名稱就叫router服務,後面部分描述簡寫為r。而對映關係儲存模組叫做state store服務。
我們首先來看router服務,路由器角色,同時與底下的namenode和上面的state store服務通訊。router在這裡主要有2個作用:
router路由服務並不只是一對一的,它可以是乙個router對應多個namenode。這樣的話,乙個namenode可能會同時被多個router匯報,這個時候採用的演算法是quorum協議。通過這樣的設計,來實現router服務的高可用性。乙個router掛了,不會影響系統的執行,每個router都是獨立執行的。router匯報結構如下圖:
接下來,我們來看另外乙個關鍵的服務state store服務。因為有了這個狀態服務,所以router路由服務它是無狀態的。那麼state store儲存的資訊主要有哪些呢?答案如下:
在上面4點中,筆者主要來聊聊第2點設計的一些細節。維護在state store內部的遠端掛載表資訊,它可能會是很龐大的,因為目標對映的路徑可能會很多。如下所示:
hdfs://share → hdfs://c0-2/share
hdfs://user/user1 → hdfs://c0-3/user/user1
hdfs://user/user2 → hdfs://c0-2/user2
所以設計者在這裡提供了2類持久化的方案,一種是基於檔案的儲存,還有一種是儲存在額外zookeeper服務上。
在viewfs中,這些對映關係是使用者主動配置在客戶端的配置檔案中的。而這在router federation中是不需要的,state store服務內部有各個namenode的資訊,它能查詢找到正確的nn,然後將對映資訊儲存下來。當然這些對映資訊會被更新一旦被發現是過期或是不正確的時候。
結合上面的角色服務介紹,下面我們來看看乙個客戶端請求的完整過程,這樣我們能直觀地理解本文以上所闡述的內容了。
大致過程呼叫如下圖所示,先後順序已由數字標好(笑臉代表客戶端使用者)。
步驟1:客戶端呼叫router提供的請求介面。
步驟2:該router向state store服務查詢該請求對應的正確的nn位址。
步驟3:router得到正確的nn位址後,將請求**到正確的nn上。
步驟4,然後nn返回檔案資料所在的dn位址,客戶端與此dn進行訊息通訊(讀/寫block檔案資料)
[1].
[2].
rabbitmq的聯邦交換機federation
有些時候,我們的rabbitmq為了容災,會部署到不同的城市。例如北京部署一台rabbitmq,廣州部署一台rabbitmq。其中廣州rabbitmq有exchangea。當北京的應用要發訊息到exchangea的時候,會因為網路原因,導致傳送時間延時。federation提供了乙個能力,讓北京的r...
基於查詢的路由協議
一 基於查詢的路由協議 1 定向擴散路由協議 定向擴散路由協議是一種基於查詢的路由方法,這和傳統路由演算法的概念不同。定向擴散路由機制包括週期性的興趣擴散 梯度建立 資料傳播與路徑加強等階段。興趣擴散階段 在興趣擴散階段,匯聚節點周期性地向鄰居節點廣播興趣訊息。興趣訊息包括任務型別 事件區域 資料傳...
基於Attribute的Web API路由設定
路由對於mvc應用程式來說都是至關重要的乙個部門,不管是asp.net mvc或者ruby on rails 當然還有其它的,我只熟悉這兩個 asp.net mvc自帶的路由配置是在global.asax檔案中,這裡給大家介紹乙個基於屬性的路由配置工具 attributerouting,它不僅可以適...