HDFS Federation (讀書筆記)

来源:http://www.cnblogs.com/BYRans/archive/2016/05/24/5524780.html
-Advertisement-
Play Games

HDFS Federation (讀書筆記) HDFS的架構 HDFS包含兩個層次: 命名空間管理 (Namespace) 和 塊/存儲管理 (Block Storage)。 命名空間管理(Namespace) HDFS的命名空間包含目錄、文件和塊。命名空間管理是指命名空間支持對HDFS中的目錄、文 ...


HDFS Federation (讀書筆記)


HDFS的架構

HDFS包含兩個層次:命名空間管理(Namespace) 和 塊/存儲管理(Block Storage)。

  • 命名空間管理(Namespace)
    HDFS的命名空間包含目錄、文件和塊。命名空間管理是指命名空間支持對HDFS中的目錄、文件和塊做類似文件系統的創建、修改、刪除、列表文件和目錄等基本操作。

  • 塊/存儲管理(Block Storage)
    在塊存儲服務中包含兩部分工作:塊管理和物理存儲。這是一個更通用的存儲服務。其他的應用可以直接建立在Block Storage上,如HBase,Foreign Namespaces等。
    • 塊管理
      • 處理Data Node向Name Node註冊的請求,處理datanode的成員關係,處理來自Data Node周期性的心跳。
      • 處理來自塊的報告信息,維護塊的位置信息。
      • 處理與塊相關的操作:塊的創建、刪除、修改及獲取塊信息。
      • 管理副本放置(replica placement)和塊的複製及多餘塊的刪除。
    • 物理存儲
      所謂物理存儲就是:Data Node把塊存儲到本地文件系統中,對本地文件系統的讀、寫。

oldHDFSArchiteture

整個HDFS集群中只有一個Namenode,還有一個Backup Namenode。Namenode會實時將變化的HDFS的信息同步給Backup Namenode。Backup Namenode顧名思義是用來做Namenode的備份的。Namenode中命名空間以層次結構組織中存儲著文件名和BlockID的對應關係、BlockID和具體Block位置的對應關係。這個單獨的Namenode管理著數個Datanode,Block分佈在各個Datanode中,每個Datanode會周期性的向此Namenode發送心跳消息,報告自己所在Datanode的使用狀態。Block是用來存儲數據的最小單元,通常一個文件會存儲在一個或者多個Block中,預設Block大小為64MB。

HDFS架構的局限

當前HDFS架構只允許整個集群中存在一個namespace,而該namespace被僅有的一個namenode管理。這個架構使得HDFS非常容易實現,但是,它在具體實現過程中耦合度比較高,進而導致了很多局限性,當然這些局限性只有在擁有規模大集群的公司,像baidu,騰訊等出現。HDFS的局限性主要為:

  • Block Storage和namespace高耦合
    當前namenode中的namespace和block management的結合使得這兩層架構耦合在一起,難以讓其他可能namenode實現方案直接使用block storage。
  • namenode擴展性
    HDFS的底層存儲是可以水平擴展的(解釋:底層存儲指的是datanode,當集群存儲空間不夠時,可簡單的添加機器已進行水平擴展),但namespace不可以。當前的namespace只能存放在單個namenode上,而namenode在記憶體中存儲了整個分散式文件系統中的元數據信息,這限制了集群中數據塊,文件和目錄的數目。
  • 性能
    文件操作的性能制約於單個namenode的吞吐量,單個namenode當前僅支持約60K的task,而下一代Apache MapReduce將支持多餘100K的併發任務,這隱含著要支持多個namenode。
  • 隔離性
    現在大部分公司的集群都是共用的,每天有來自不同group的不同用戶提交作業。單個namenode難以提供隔離性,即:某個用戶提交的負載很大的job會減慢其他用戶的job,單一的namenode難以像HBase按照應用類別將不同作業分派到不同namenode上。

HDFS Federation

概述

HDFS Federation是Hadoop最新發佈版本Hadoop-0.23.0中為解決HDFS單點故障而提出的namenode水平擴展方案。該方案允許HDFS創建多個namespace以提高集群的擴展性和隔離性。採用Federation的最主要原因是簡單,Federation能夠快速的解決了大部分單Namenode的問題。

HDFS Federation架構

federation
為了水平擴展namenode,federation使用了多個獨立的namenode/namespace。這些namenode之間是聯合的,也就是說,他們之間相互獨立且不需要互相協調,各自分工,管理自己的區域。分散式的datanode被用作通用的數據塊存儲存儲設備。每個datanode要向集群中所有的namenode註冊,且周期性地向所有namenode發送心跳和塊報告,並執行來自所有namenode的命令。
一個block pool由屬於同一個namespace的數據塊組成,每個datanode可能會存儲集群中所有block pool的數據塊。
每個block pool內部自治,也就是說各自管理各自的block,不會與其他block pool交流。一個namenode掛掉了,不會影響其他namenode。
某個namenode上的namespace和它對應的block pool一起被稱為namespace volume(命名空間捲)。它是管理的基本單位。當一個namenode/nodespace被刪除後,其所有datanode上對應的block pool也會被刪除。當集群升級時,每個namespace volume作為一個基本單元進行升級。

Federation關鍵技術點

  • 命名空間管理
    Federation中存在多個命名空間,如何劃分和管理這些命名空間非常關鍵。在Federation中並採用“文件名hash”的方法,因為該方法的locality非常差,比如:查看某個目錄下麵的文件,如果採用文件名hash的方法存放文件,則這些文件可能被放到不同namespace中,HDFS需要訪問所有namespace,代價過大。為了方便管理多個命名空間,HDFS Federation採用了經典的Client Side Mount Table。
    client-side-mount-table
    如上圖所示,下麵四個深色三角形代表一個獨立的命名空間,上方淺色的三角形代表從客戶角度去訪問的子命名空間。各個深色的命名空間Mount到淺色的表中,客戶可以訪問不同的掛載點來訪問不同的命名空間,這就如同在Linux系統中訪問不同掛載點一樣。這就是HDFS Federation中命名空間管理的基本原理:將各個命名空間掛載到全局mount-table中,就可以做將數據到全局共用;同樣的命名空間掛載到個人的mount-table中,這就成為應用程式可見的命名空間視圖。

  • Block Pool(塊池)
    所謂Block pool(塊池)就是屬於單個命名空間的一組block(塊)。每一個datanode為所有的block pool存儲塊。Datanode是一個物理概念,而block pool是一個重新將block劃分的邏輯概念。同一個datanode中可以存著屬於多個block pool的多個塊。Block pool允許一個命名空間在不通知其他命名空間的情況下為一個新的block創建Block ID。同時,一個Namenode失效不會影響其下的datanode為其他Namenode的服務。
    當datanode與Namenode建立聯繫並開始會話後自動建立Block pool。每個block都有一個唯一的標識,這個標識我們稱之為擴展的塊ID(Extended Block ID)= BlockID+BlockID。這個擴展的塊ID在HDFS集群之間都是唯一的,這為以後集群歸併創造了條件。
    Datanode中的數據結構都通過塊池ID(BlockPoolID)索引,即datanode中的BlockMap,storage等都通過BPID索引。
    在HDFS中,所有的更新、回滾都是以Namenode和BlockPool為單元發生的。即同一HDFS Federation中不同的Namenode/BlockPool之間沒有什麼關係。
    Hadoop V0.23版本中Block Pool的管理功能依然放在了Namenode中,將來的版本中會將Block Pool的管理功能移動的新的功能節點中。

主要優點

  • 擴展性和隔離性
    支持多個namenode水平擴展整個文件系統的namespace。可按照應用程式的用戶和種類分離namespace volume,進而增強了隔離性。
  • 通用存儲服務
    Block Pool抽象層為HDFS的架構開啟了創新之門。分離block storage layer使得:
    • 新的文件系統(non-HDFS)可以在block storage上構建
    • 新的應用程式(如HBase)可以直接使用block storage層
    • 分離的block storage層為將來完全分散式namespace打下基礎
  • 設計簡單
    Federation 整個核心設計實現大概用了4個月。大部分改變是在Datanode、Config和Tools中,而Namenode本身的改動非常少,這樣 Namenode原先的魯棒性不會受到影響。雖然這種實現的擴展性比起真正的分散式的Namenode要小些,但是可以迅速滿足需求,另外Federation具有良好的向後相容性,已有的單Namenode的部署配置不需要任何改變就可以繼續工作

HDFS Federation不足

  • 單點故障問題
    HDFS Federation並沒有完全解決單點故障問題。雖然namenode/namespace存在多個,但是從單個namenode/namespace看,仍然存在單點故障:如果某個namenode掛掉了,其管理的相應的文件便不可以訪問。Federation中每個namenode仍然像之前HDFS上實現一樣,配有一個secondary namenode,以便主namenode掛掉一下,用於還原元數據信息。
  • 負載均衡問題
    HDFS Federation採用了Client Side Mount Table分攤文件和負載,該方法更多的需要人工介入已達到理想的負載均衡。

引用資料

http://zh.hortonworks.com/blog/an-introduction-to-hdfs-federation/
http://dongxicheng.org/mapreduce/hdfs-federation-introduction/
http://blog.csdn.net/strongerbit/article/details/7013221/

註:本博客引用了上面的博客內容,如有侵權,請聯繫博主。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ...
  • 首先,確保你已經關掉了openfire打開終端 (在應用程式-->實用工具-->)輸入以下命令sudo rm -rf /Library/PreferencePanes/Openfire.prefPanesudo rm -rf /usr/local/openfiresudo rm -rf /Libra ...
  • 很多開發過微信的人估計都遇到過這樣的問題,ios下微信頁面標題更改不了,而安卓卻可以直接用:document.title="你的標題"。 下麵是解決這個問題的hack: 1.jquery方式 2.不依賴jquery ...
  • 項目中有需求是A視圖控制器push之後B視圖控制器需要隱藏底部的tabbar,在pop之後A視圖控制器仍然顯示tabbar. 其實不需要在push操作時敲 self.hidesBottomBarWhenPushed = NO;,然後再pop返回時再設置成NO. 對於這個全局屬性,可以在A中 - (v ...
  • Bundle : http://www.cnblogs.com/BigPolarBear/archive/2012/03/28/2421802.html http://blog.sina.com.cn/s/blog_7b9d64af0101jmj2.html http://www.mamicode. ...
  • 感覺 每走一步都會遇到 問題 都在成長。 今天 申請了 開發者證書 下載下來 之後 安裝 一直顯示此證書的 簽發者無效。 說一下 解決方案 1.先打開鑰匙串 選擇顯示已過期的證書 這是由於蘋果系統的安全證書過期問題導致。 2.在鑰匙串里 選擇 登錄 - 所有項目 3.然後在再搜索框里輸入apple ...
  • 1:Masonry快速查看報錯小技巧 註意:MASAttachKeys會顯示出比較明瞭的錯誤信息; 2:iOS跳轉到系統設置 註意:想要實現應用內跳轉到系統設置界面功能,需要先在Targets-Info-URL Types-URL Schemes中添加prefs 3:UITableView sect ...
  • 2.1 關係資料庫的結構 關係資料庫由表(table)的集合構成,每個表有唯一的名字。例如,instructor表記錄了有關教師的信息,它有四個列首:ID、name、dept_name和salary。該表中每一行記錄了一位教師的信息,包括該教師的ID、name、dept_name以及salary。類 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...