官术网_书友最值得收藏!

2.1 HDFS概述

Hadoop實現了一個分布式文件系統(Hadoop Distributed File System, HDFS), HDFS是Apache Hadoop Core項目的一部分,是Hadoop兼容性最好的標準級分布式文件系統。

2.1.1 分布式文件系統

當今的信息時代中,人們可以獲取的數據成指數倍地增長。單純通過增加硬盤個數來擴展計算機文件系統的存儲容量的方式,在容量大小、容量增長速度、數據備份、數據安全等方面都不適用,對于數據量很大的應用系統來說尤其如此。分布式文件系統可以有效解決數據的存儲和管理難題。

分布式文件系統(Distributed File System, DFS)指通過一套管理系統,能夠將文件分散至不同的計算機進行存儲,并通過規范的標準協議,方便客戶機進行高效存取。

與單機的文件系統不同,分布式文件系統不是將數據放在一塊磁盤上由上層操作系統來管理,而是存放在一個服務器集群上,由集群中的服務器通過各盡其責、通力合作的方式提供整個文件系統的服務。將固定于某個地點的某個文件系統,擴展到任意多個地點/多個文件系統,這些節點組成一個文件系統網絡。每個節點可以分布在不同的地點,通過網絡進行節點間的通信和數據傳輸。人們在使用分布式文件系統時,無須關心數據是存儲在哪個節點上,或者是從哪個節點獲取的,只需要像使用本地文件系統一樣管理和存儲文件系統中的數據即可。

分布式文件系統中,重要的服務器包括:主控服務器(Master/NameNode)、數據服務器(一般稱為ChunkServer或DataNode)和客戶服務器(Client)。分布式文件系統的典型架構如圖2-1所示。

圖2-1 典型分布式文件系統的結構

1.分布式文件系統的特點

與傳統文件系統相比,分布式文件系統具有以下主要特點。

(1)可擴展性強。擴展能力是一個分布式文件系統最重要的特點?;旧?,所有的分布式文件系統都支持隨時隨地對數據服務器進行擴展,提升存儲容量和訪問帶寬等。有的系統還支持多個目錄/主控服務器。

(2)統一命名空間。采用統一命名空間,分布式文件系統對于客戶端是完全透明的,客戶端看到的是統一的全局命名空間,用戶操作起來就像是管理本地文件系統。通過元數據管理,文件以塊的方式采用多副本模式進行存放。

(3)高性能。由于一個文件被分成多份,保存在不同的數據服務器上,訪問時,可以同時讀取,性能會達到最優。

(4)高可用性。分布式文件系統必須具有高容錯能力,即無論是客戶端還是服務器出現故障,都不會影響整個系統的功能。為了做到這一點,單點失效是必須被避免的,例如使用資源冗余技術或者提供失效恢復服務。單個數據節點的故障并不會影響集群整體運轉。

(5)彈性存儲??梢愿鶕I務需要靈活地增加或縮減數據存儲以及增刪存儲池中的資源,而不需要中斷系統運行。彈性存儲的最大挑戰,是減小或增加資源時的數據震蕩問題。

2.常見的分布式文件系統

分布式文件系統既有開源軟件平臺解決方案,如Hadoop HDFS、Fast DFS等;也有非開源平臺解決方案,如最為著名的Google FS、也有像Windows Server 2003/2008平臺上的DFS組件等。

分布式文件系統在當前應用普遍,產品種類豐富。下面介紹幾種典型的系統。

(1)Lustre。

Lustre最早是由HP、Cluster File System聯合美國能源部共同開發的Linux平臺下的分布式集群文件系統,后期由于Cluster File System公司被Sun收購,而Sun又被Oracle收購,因此,Lustre官方網站目前掛靠在Oracle公司(http://wiki.lustre.org/index.php/Main_Page)。

Lustre主要面向超級計算機,擁有超強可擴展性與可靠性,能夠支持上萬個節點、PB級存儲、100GB/s的高速訪問能力。

Lustre采用GPL許可協議,屬于開放源代碼的分布式集群文件系統,開發語言采用C/C++,使用平臺為Linux;當前,除了Oracle公司外,有新成立的名為Whamcloud的公司專注于Lustre平臺的開源研發,其官方網站為http://www.whamcloud.com/。

(2)Google FS。

Google FS(Google File System)是谷歌公司開發的一個分布式可擴展的文件系統,它主要用于大型、分布式、大數據量的互聯網應用平臺。

Google FS被設計運行在廉價普通的PC服務器上,提供多數據副本實現數據冗余,通過數據分塊并行存取,滿足互聯網用戶的海量數據存儲需求。

Google FS最早是由Google工程師于2003年發表的一篇學術文章The Google File System而為世人所熟知的,Google FS提供了相似的訪問接口,如read、write、create、delete、close等,使得開發者可以非常方便地使用。

Google FS運行于Linux平臺上,開發語言是C/C++,本身并不開源,本章中所介紹的Hadoop平臺,是在受到Google FS啟發后,采用其理念重新用Java語言實現的一個開源平臺。

(3)Fast DFS。

Fast DFS是一個類Google FS的開源分布式文件系統,它由C/C++語言開發,可運行于Linux、Unix、AIX平臺。Fast DFS提供專用文件存取訪問方式,不支持POSIX接口方式,在系統中也不能使用mount方式掛接。FastDFS在架構上充分考慮了冗余備份、負載均衡、可擴展等問題,平臺本身具有高可用、高性能等優點。Fast DFS支持文件的高效存儲、同步、上傳、下載等,比較適合于互聯網視頻網站、文檔分享網站、圖片分享網站等應用。

2.1.2 HDFS介紹

HDFS是Hadoop的核心子項目,是整個Hadoop平臺數據存儲與訪問的基礎,在此之上,承載其他如MapReduce、HBase等子項目的運轉。

HDFS是類似于Google FS的開源分布式文件系統,被設計成適合運行在通用硬件上的分布式文件系統。它與現有的分布式文件系統有很多共同點。但同時,它與其他的分布式文件系統的區別也是很明顯的。

HDFS是一個高度容錯性的系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的數據訪問,非常適合大規模數據集上的應用。HDFS放寬了一部分POSIX約束,來實現流式讀取文件系統數據的目的。

HDFS是易于使用與管理的分布式文件系統,主要特點和設計目標如下。

1.硬件故障是常態

整個HDFS系統可以由數百或數千個存儲著文件數據片段的服務器組成。實際上,它里面有非常巨大的組成部分,每一個組成部分都很可能出現故障,這就意味著HDFS里總是有一些部件是失效的,因此故障的檢測和自動快速恢復是HDFS一個很核心的設計目標。

2.流式數據訪問

HDFS被設計成適合批量處理的,而不是用戶交互式的。POSIX的很多硬性需求對于HDFS應用都是非必需的,HDFS放寬了POSIX的要求,這樣,可以實現以流的形式訪問(Streaming Access)文件系統中的數據。同時去掉POSIX一小部分關鍵語義,可以獲得更好的數據吞吐率。

3.簡單的一致性模型

大部分HDFS程序對文件操作需要的是一次寫、多次讀取的操作模式。HDFS假定一個文件一旦創建、寫入、關閉之后就不需要修改了。這簡單化了數據一致的問題,并使高吞吐量的數據訪問變得可能。

4.名字節點(NameNode)和數據節點(DataNode)

HDFS是一個主從結構,一個HDFS集群包括一個名字節點(也叫名稱節點),它是一個管理文件命名空間和調節客戶端訪問文件的主服務器,當然,還有一些數據節點,通常是一個節點一個機器,它來管理對應節點的存儲。HDFS對外開放文件命名空間,并允許用戶數據以文件形式存儲。內部機制是將一個文件分割成一個或多個塊,這些塊被存儲在一組數據節點中。名字節點用來操作文件命名空間的文件或目錄操作,如打開、關閉、重命名等。它同時確定塊與數據節點的映射。數據節點負責來自文件系統客戶的讀寫請求。數據節點同時還要執行塊的創建、刪除,以及來自名字節點的塊復制指令。

5.大規模數據集

HDFS被設計為PB級以上存儲能力,單個的存儲文件可以是GB或者TB級。因此,HDFS的一個設計原則是支持成千上萬大數據文件的存儲,即將單個文件分成若干標準數據塊,分布存儲于多個節點上,當用戶訪問整個文件時,由這些節點集群向用戶傳輸所擁有的數據塊,由此可以獲得極高的并行數據傳輸速率。

6.可移植性

HDFS在設計之初,就考慮到了異構軟硬件平臺間的可移植性,能夠適應于主流硬件平臺。它基于跨操作系統平臺的Java語言進行編寫,這有助于HDFS平臺的大規模應用推廣。

名字節點是整個HDFS的核心。一個標準的HDFS集群應由名字節點、備用名字節點、數據節點組成,HDFS的基本結構如圖2-2所示。

圖2-2 HDFS系統的基本結構

集群中,一臺機器上只運行一個NameNode實例,而集群中其他機器分別運行一個DataNode實例。NameNode是一個中心服務器,負責管理文件系統的名字空間以及客戶端對文件的訪問,用戶能夠以文件的形式在上面進行名字空間操作,比如打開、關閉、重命名文件或目錄,同時,NameNode還決定了數據塊到數據節點的映射關系。NameNode也可以稱為管理文件系統的元數據。集群中,每一個節點配置一個DataNode,每個DataNode負責管理它所在節點上的數據存儲。從內部看,一個文件被分成一個或多個數據塊,這些塊存儲在一組DataNode上。同時,DataNode負責處理文件系統客戶端的讀寫請求,在NameNode的統一調度下進行數據塊的創建、刪除和復制。

HDFS的數據塊:磁盤存儲文件時,是按照數據塊(block)來存儲的,也就是說,數據塊是磁盤讀/寫的最小單位。數據塊也稱磁盤塊。在HDFS中也有塊的概念,默認為64MB,每個塊作為獨立的存儲單元。

基于數據塊的存儲方式非常適合用于備份,可提供數據容錯能力和可用性(如圖2-3所示)。HDFS提供給應用程序例如MapReduce數據服務。一般來說,MapReduce的Map任務通常一次處理一個塊中的數據,如果任務數太少(少于集群中節點的數量),就沒有發揮多節點的優勢,甚至作業的運行速度就會與單節點一樣。

圖2-3 HDFS塊副本

主站蜘蛛池模板: 南川市| 海丰县| 天气| 兴安盟| 涟源市| 平定县| 鸡西市| 修武县| 南和县| 和平区| 盈江县| 衡阳县| 开鲁县| 克山县| 应城市| 盐亭县| 泌阳县| 常山县| 定州市| 重庆市| 龙里县| 黑龙江省| 囊谦县| 雅江县| 资中县| 洛浦县| 绵竹市| 宜都市| 吉安县| 双城市| 东兴市| 海林市| 新巴尔虎左旗| 贡觉县| 卫辉市| 唐海县| 芜湖市| 鄄城县| 长垣县| 泾阳县| 洛南县|