HDFS Federation(HDFS 聯盟)介紹



1. 當前HDFS架構和功能概述

我們先回顧一下HDFS功能。HDFS實際上具有兩個功能:命名空間管理(Namespace management)和塊/存儲管理服務(block/storage management)。



1.1 命名空間管理

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


1.2 塊/存儲管理

在塊存儲服務中包含兩部分工作:塊管理物理存儲。這是一個更通用的存儲服務。其他的應用可以直接建立在Block Storage上,如HBase,Foreign Namespaces等。


1.2.1 塊管理

A) 處理Data Node向Name Node注冊的請求,處理datanode的成員關系,處理來自Data Node周期性的心跳。

B) 處理來自塊的報告信息,維護塊的位置信息。

C) 處理與塊相關的操作:塊的創建、刪除、修改及獲取塊信息。

D) 管理副本放置(replica placement)和塊的復制及多余塊的刪除。


1.2.2 物理存儲

所謂物理存儲就是:Data Node把塊存儲到本地文件系統中,對本地文件系統的讀、寫。


1.3 當前HDFS的架構

在當前的HDFS架構中(Hadoop v0.23之前),在整個HDFS集群中只有一個命名空間,并且只有單獨的一個Name Node,這個Name Node負責對這單獨的一個命名空間進行管理。這也正是單點失效(Single Point Failure)的隱患所在。本文所講的HDFS Federation就是針對當前HDFS架構上的缺陷所做的改進,簡單說HDFS Federation就是使得HDFS支持多個命名空間,并且允許在HDFS中同時存在多個Name Node

簡單回顧一下目前HDFS的架構,如下圖所示。在整個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。




2. 單個Namenode的HDFS架構的局限性

2.1 Namespace(命名空間)的限制

由于Namenode在內存中存儲所有的元數據(metadata),因此單個Namenode所能存儲的對象(文件+塊)數目受到Namenode所在JVM的heap size的限制。50G的heap能夠存儲20億(200 million)個對象,這20億個對象支持4000個datanode,12PB的存儲(假設文件平均大小為40MB)。
隨著數據的飛速增長,存儲的需求也隨之增長。單個datanode從4T增長到36T,集群的尺寸增長到8000個datanode。存儲的需求從12PB增長到大于100PB。

2.2 性能的瓶頸

由于是單個Namenode的HDFS架構,因此整個HDFS文件系統的吞吐量受限于單個Namenode的吞吐量。毫無疑問,這將成為下一代MapReduce的瓶頸。

2.3 隔離問題

由于HDFS僅有一個Namenode,無法隔離各個程序,因此HDFS上的一個實驗程序就很有可能影響整個HDFS上運行的程序。那么在HDFS Federation中,可以用不同的Namespace來隔離不同的用戶應用程序,使得不同Namespace Volume中的程序相互不影響。

2.4 集群的可用性

在只有一個Namenode的HDFS中,此Namenode的宕機無疑會導致整個集群不可用。

2.5 Namespace和Block Management的緊密耦合

當前在Namenode中的Namespace和Block Management組合的緊密耦合關系會導致如果想要實現另外一套Namenode方案比較困難,而且也限制了其他想要直接使用塊存儲的應用。

2.6 為什么縱向擴展目前的Namenode不可行?比如將Namenode的Heap空間擴大到512GB。

這樣縱向擴展帶來的第一個問題就是啟動問題,啟動花費的時間太長。當前具有50GB Heap Namenode的HDFS啟動一次大概需要30分鐘到2小時,那512GB的需要多久?
第二個潛在的問題就是Namenode在Full GC時,如果發生錯誤將會導致整個集群宕機。
第三個問題是對大JVM Heap進行調試比較困難。優化Namenode的內存使用性價比比較低。

3. 為什么要引入Federation

引入Federation的最主要原因是簡單,其簡單性是與真正的分布式Namenode相比而言的。Federation能夠快速的解決了大部分單Namenode HDFS的問題。

Federation是簡單魯棒的設計,由于聯盟中各個Namenode之間是相互獨立的。Federation整個核心設計實現大概用了3.5個月。大部分改變是在Datanode、Config和Tools,而Namenode本身的改動非常少,這樣Namenode原先的魯棒性不會受到影響。比分布式的Namenode簡單,雖然這種實現的擴展性比起真正的分布式的Namenode要小些,但是可以迅速滿足需求。另外一個原因是Federation良好的向后兼容性,已有的單Namenode的部署配置不需要任何改變就可以繼續工作。

因此Federation(聯盟)是未來可選的方案之一。在Federation架構中可以無縫的支持目前單Namenode架構中的配置。

4. HDFS Federation

HDFS Federation使用了多個獨立的Namenode/namespace來使得HDFS的命名服務能夠水平擴展。在HDFS Federation中的Namenode之間是聯盟關系,他們之間相互獨立且不需要相互協調。HDFS Federation中的Namenode提供了提供了命名空間和塊管理功能。HDFS Federation中的datanode被所有的Namenode用作公共存儲塊的地方。每一個datanode都會向所在集群中所有的Namenode注冊,并且會周期性的發送心跳和塊信息報告,同時處理來自Namenode的指令。


4.1 Federation HDFS與當前HDFS的比較

  • 當前HDFS只有一個命名空間(Namespace),它使用全部的塊。而Federation HDFS中有多個獨立的命名空間(Namespace),并且每一個命名空間使用一個塊池(block pool)。
  • 當前HDFS中只有一組塊。而Federation HDFS中有多組獨立的塊。塊池(block pool)就是屬于同一個命名空間的一組塊。
  • 當前HDFS由一個Namenode和一組datanode組成。而Federation HDFS由多個Namenode和一組datanode,每一個datanode會為多個塊池(block pool)存儲塊。


4.2 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的管理功能移動的新的功能節點中。


4.3 Datanode的改進

在datanode中,對應于每個Namnode都有一條相應的線程。每個datanode會去每一個Namenode注冊,并且周期性的給所有的Namenode發送心跳及datanode的使用報告。Datanode還會給Namenode發送其所在的block pool的block report(塊報告)。由于有多個Namenode同時存在,因此任何一個Namenode都可以隨時動態加入、刪除和更新。


4.4 Federation中的其他方面的改進

  • 提供了工具,對于Namenode的初始化和退役的監控和管理。
  • 允許在datanode級別或者block pool級別的負載均衡。
  • Datanode的后臺守護進程,為Federation所做的磁盤和目錄掃描。
  • 提供了顯示Namenode的Block pool的使用狀態的Web UI。
  • 還提供了對全部集群存儲使用狀態的UI展示。
  • 在Web UI中列出了所有的Namenode及其細節,如Namenode-BlockPoolID和存儲的使用狀態,失去聯系的、活的和死的塊信息。還有前往各個Namenode Web UI的鏈接。
  • Datanode退役狀態的展示。


4.5 多命名空間的管理問題

在一個集群中需要唯一的命名空間還是多個命名空間,核心問題命名空間中數據的共享和訪問的問題。使用全局唯一的命名空間是解決數據共享和訪問的一種方法。在多命名空間下,我們還可以使用Client Side Mount Table方式做到數據共享和訪問。

如上圖所示,每個深色三角形代表一個獨立的命名空間,上方淺色的三角形代表從客戶角度去訪問下方的子命名空間。各個深色的命名空間Mount到淺色的表中,客戶可以訪問不同的掛載點來訪問不同的命名空間,這就如同在Linux系統中訪問不同掛載點一樣。這就是HDFS Federation中命名空間管理的基本原理:將各個命名空間掛載到全局mount-table中,就可以做將數據到全局共享;同樣的命名空間掛載到個人的mount-table中,這就成為應用程序可見的命名空間視圖


4.6 Namespace Volume(命名空間卷)

一個Namespace和它的Block Pool合在一起稱作Namespace Volume。Namespace Volume是一個獨立完整的管理單元。當一個Namenode/Namespace被刪除,與之相對應的Block Pool也也被刪除。在升級時每一個Namespace Volume也會整體作為一個單元。

4.7 ClusterID

在HDFS Federation中添加了Cluster ID用來區分集群中的每個節點。當格式化一個Namenode時,這個ClusterID會自動生成或者手動提供。在格式化同一集群中其他Namenode時會用到這個ClusterID。


4.8 HDFS Federation對老版本的HDFS是兼容的

這種兼容性可以使得已有的Namenode配置不需要任何改變繼續工作。

具體的如何配置和管理Federation HDFS,請參考?http://hadoop.apache.org/common/docs/r0.23.0/hadoop-yarn/hadoop-yarn-site/Federation.html#Federation_Configuration?。





本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539342.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539342.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539342.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux java 部署 生產環境

2019獨角獸企業重金招聘Python工程師標準>>> 下載文件 首先進入網頁: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 點擊Accept License Agreement后選擇jdk-8u161-linux-x64.tar.gz,下載。 配置環…

c#位數不夠0補充完_C# 位數不足補零

C#位數不足補零:int i10;方法1:Console.WriteLine(i.ToString("D5"));方法2:Console.WriteLine(i.ToString().PadLeft(5,0));//推薦方法3:Console.WriteLine(i.ToString("00000"));在 C# 中可以對字符串使用 …

華為鴻蒙發布作文,華為鴻蒙OS定檔6月2日發布!MatePad Pro 2或同臺亮相:首發預裝...

5月25日一早,原華為EMUI官微就正式宣布更名為Harmony OS,并宣布將在6月2日晚20點召開鴻蒙操作系統及華為全場景新品發布會,屆時將正式發布鴻蒙OS正式版。據近期進行開發者測試的用戶反饋,鴻蒙OS目前已經非常完善,且穩定…

python如何根據數據畫散點圖_如何用python畫出樣本的散點圖?

用python畫樣本散點圖的方法: 數據(取第一列作為x,取第四列作為y)如下:實現代碼如下:import matplotlib.pyplot as plt import numpy as np # 定義畫散點圖的函數 def draw_scatter(n, s): ""&qu…

Hadoop RPC框架

原文:http://blog.csdn.net/thomas0yang/article/details/41211259 ---------------------------------------------------------------------------------------------- 1、RPC框架概述1.1 RPC(Remote Procedure Call Protocol)——遠程過程…

JavaSE基礎知識學習-----泛型

泛型 Java泛型是jdk1.5的一個新特性,jdk的性特性還包括:泛型,枚舉,裝箱和拆箱,可變參數等。這里先主要學習泛型。這些特性,現在都在廣泛的使用。因為現在使用IDE編寫代碼,都是標準的代碼提示&am…

centos7 校正linux系統時間_Linux系統:Centos7下搭建ClickHouse列式存儲數據庫

一、ClickHouse簡介1、基礎簡介Yandex開源的數據分析的數據庫,名字叫做ClickHouse,適合流式或批次入庫的時序數據。ClickHouse不應該被用作通用數據庫,而是作為超高性能的海量數據快速查詢的分布式實時處理平臺,在數據匯總查詢方面…

html調用js頁面顯示不出來了,JS代碼文件調用顯示亂碼,直接寫在html頁面的里可以調用,但是單獨放在js文件里不能調用...

最近遇到了一個很奇怪的問題,就是在HTML網頁代碼里直接寫JS代碼可以正常運行的代碼,使用JS文件調用就不行。var cities [ {"name" : "北京"}, {"name" : "上海"}, {"name" : "廣州"} ];$(…

水系圖一般在哪里找得到_城市供水系統防護體系的探索與思考

城市是一個國家或地區的政治、經濟和文化中心, 在戰爭中常常被選為重點打擊目標。1988年,時任美國空軍司令部副參謀長助理的約翰A. 沃登上校提出“五環”目標打擊理論,將 對敵打擊目標分為五個層,其中就將基礎設施列為第三層打擊目…

Hadoop webHDFS設置和使用說明

原文:http://blog.csdn.net/iloveyin/article/details/28264027 ---------------------------------------------------------------------------------------- 1.配置 namenode的hdfs-site.xml是必須將dfs.webhdfs.enabled屬性設置為true,否則就不能使…

CES 2017前瞻之AI:無人機依舊小巧,機器人主打家庭服務

再過2天,CES 2017就要開始了,根據這些已知曉的部分展商,我們也許能夠看到未來的一些趨勢。 還有2天,備受矚目的CES 2017(2017年國際消費類電子產品展覽會)就要拉開帷幕了。 每一年,CES上都會出…

ionic html5 上傳圖片,ionic4+angular7+cordova上傳圖片功能的實例代碼

前言ionic是一個垮平臺開發框架,可通過web技術開發出多平臺的應用。但只建議開發簡單應用。復雜的應用需要用到許多cordova插件,而cordova插件的更新或者移動平臺的更新很可能導致插件的不可用,維護升級成本較高。安裝插件安裝插件Image Pick…

HDFS體系結構

Namenode 是整個文件系統的管理節點。它維護著整個文件系統的文件目錄樹,文件/目錄的元信息metadate和每個文件對應的數據塊列表。 功能:接收用戶的操作請求。 metadate信息包括: 1、文件的owership和permission。 2、文件包含哪些block塊…

為什么要將html頁面和樣式表分離,0031 如何使用css文件對網頁內容和樣式進行分離...

原標題:0031 如何使用css文件對網頁內容和樣式進行分離上節課,學習了針對文字可以設置很多種樣式。這節課,學習如何將內容和樣式進行分離。上節課的課后練習1.將斜體字體效果去除2.將工作經歷和工作經驗(部分)這2行文字也做成簡介這行文字的效…

redis 關系數據庫怎么轉換 和_redis數據庫設計(轉)

閱讀目錄redis是什么redis就是一個存儲key-value鍵值對的倉庫,如何使用redis在于如何理解你需要設計的系統的E-R的模型,然后合理的規劃redis的數據庫結構場景我舉一個簡單的消息系統的例子,業務需求:服務器端發送消息給用戶E-R模型…

Hadoop Archives

介紹 時間: Hadoop Archives (HAR files)是在0.18.0版本中引入的。 作用: 將hdfs里的小文件打包成一個文件,相當于windows的zip,rar。Linux的 tar等壓縮文件。把多個文件打包一個文件。 意義: 它的出現就是為了緩…

js 判斷日期時間差

2019獨角獸企業重金招聘Python工程師標準>>> alert(GetDateDiff("2018-02-27 19:20:22","2018-02-27 09:20:22","hour"));function GetDateDiff(startTime, endTime, diffType) {//將xxxx-xx-xx的時間格式,轉換為 xxxx/xx…

python 圖形_Python圖形數據

CSGraph代表 壓縮稀疏圖 ,它著重于基于稀疏矩陣表示的快速圖算法。 圖表表示 首先,讓我們了解一個稀疏圖是什么以及它在圖表示中的作用。 什么是稀疏圖? 圖形只是節點的集合,它們之間有鏈接。圖表幾乎可以代表任何事物 - 社交網絡…

本地運行hadoop-Failed to locate the winutils binary in the hadoop binary path

轉自:http://www.cnblogs.com/zq-inlook/p/4386216.html 之前在mac上調試hadoop程序(mac之前配置過hadoop環境)一直都是正常的。因為工作需要,需要在windows上先調試該程序,然后再轉到linux下。程序運行的過程中&#…

dubbo 支持服務降級嗎_dubbo面試題!會這些,說明你真正看懂了dubbo源碼

整理了一些dubbo可能會被面試的面試題,感覺非常不錯。如果你基本能回答說明你看懂了dubbo源碼,對dubbo了解的足夠全面。你可以嘗試看能不能回答下。我們一起看下有哪些問題吧?dubbo中"讀接口"和"寫接口"有什么區別?談談…