1. 程式人生 > >HDFS主要特性和體系結構

HDFS主要特性和體系結構

管理 計時 保存 並且 高可用性 而且 gnu esp 數據源

Hadoop分布式文件系統(HDFS)被設計成適合運行在通用硬件(commodity hardware)上的分布式文件系統。它和現有的分布式文件系統有很多共同點。但同時,它和其他的分布式文件系統的區別也是很明顯的。HDFS是一個高度容錯性的系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的數據訪問,非常適合大規模數據集上的應用。HDFS放寬了一部分POSIX約束,來實現流式讀取文件系統數據的目的。HDFS在最開始是作為Apache Nutch搜索引擎項目的基礎架構而開發的。HDFS是Apache Hadoop Core項目的一部分。這個項目的地址是http://hadoop.apache.org/core/。

HDFS的主要特性

1. HDFS有以下幾個主要特點:

處理超大文件:存儲的一個超大文件可以達到數GB級、數TB級、數PB級。

集群規模動態擴展:節點動態加入到集群,可以數百數千個

流式數據讀寫:HDFS的設計思想“一次寫入,多次讀取”,一個數據集一旦由數據源生成,就會被復制分發到不同的存儲節點中,然後響應各種各樣的數據分析任務請求。HDFS處理的應用一般是批處理,而不是用戶交互式處理,註重的是數據的吞吐量而不是數據的訪問速度。

運行於廉價的商用機器集群上:HDFS設計時充分考慮可靠性、安全性及高可用性,因此Hadoop對硬件要求比較低,可以運行於廉價的商用機器集群,無需昂貴的高可用性機器

2. HDFS的局限性:

不適合低延遲數據訪問:HDFS是為了處理大型數據集,主要是為了達到高的數據吞吐量而設計,這就可能以高延遲作為代價。10毫秒以下的訪問可以無視hdfs,不過hbase可以彌補這個缺點

無法高效存儲大量小文件:namenode節點在內存中存儲整個文件系統的元數據,因此文件的數量就會受到限制,每個文件的元數據大約150字節

不支持多用戶寫入及任意修改文件:不支持多用戶對同一文件進行操作,而且寫操作只能在文件末尾完成,即追加操作。

HDFS的體系結構

在一個全配置的集群上,運行HDFS意味著在網絡分布的不同服務器上運行一些守護進程(daemon),這些進程有各自的特殊角色,並相互配合,一起形成一個分布式文件系統

技術分享

數據塊

HDFS也有和LInux文件系統類似的塊的概念,只不過默認的塊的大小是64MB,和普通文件系統類似,HDFS上的文件也進行分塊,塊作為單獨的存儲單元,以Linux上普通文件形式保存在數據節點的文件系統中。數據塊是HDFS的文件存儲單元

HDFS被設計成支持大文件,適用HDFS的是那些需要處理大規模的數據集的應用。這些應用都是只寫入數據一次,但卻讀取一次或多次,並且讀取速度 應能滿足流式讀取的需要。HDFS支持文件的“一次寫入多次讀取”語義。一個典型的數據塊大小是64MB。因而,HDFS中的文件總是按照64M被切分成 不同的塊,每個塊盡可能地存儲於不同的Datanode中。

HDFS使用數據塊有如下好處:

1、HDFS可以保存比存儲節點單一磁盤大的文件

文件塊可以保存在不同的磁盤上

2、簡化了存儲子系統

將管理塊和管理文件的功能區分開,簡化了存儲管理,也消除了分布式管理文件元數據的復雜性

3、方便容錯,有利於數據復制

數據塊會在不同的機器上進行復制(一般副本數為3,保存在3個不同的地方)

為什麽HDFS中要使用這麽大的數據塊?

可以減少管理數據塊需要的開銷

Namenode 和 Datanode

HDFS采用master/slave架構。一 個HDFS集群是由一個Namenode和一定數目的Datanodes組成。Namenode是一個中心服務器,負責管理文件系統的名字空間 (namespace)以及客戶端對文件的訪問。集群中的Datanode一般是一個節點一個,負責管理它所在節點上的存儲。HDFS暴露了文件系統的名 字空間,用戶能夠以文件的形式在上面存儲數據。從內部看,一個文件其實被分成一個或多個數據塊,這些塊存儲在一組Datanode上。Namenode執行文件系統的名字空間操作,比如打開、關閉、重命名文件或目錄。它也負責確定數據塊到具體Datanode節點的映射。Datanode負責處理文件系統客戶端的讀寫請求。在Namenode的統一調度下進行數據塊的創建、刪除和復制。

Namenode和Datanode被設計成可以在普通的商用機器上運行。這些機器一般運行著GNU/Linux操作系統(OS)。 HDFS采用Java語言開發,因此任何支持Java的機器都可以部署Namenode或Datanode。由於采用了可移植性極強的Java語言,使得 HDFS可以部署到多種類型的機器上。一個典型的部署場景是一臺機器上只運行一個Namenode實例,而集群中的其它機器分別運行一個Datanode 實例。這種架構並不排斥在一臺機器上運行多個Datanode,只不過這樣的情況比較少見。

集群中單一Namenode的結構大大簡化了系統的架構。Namenode是所有HDFS元數據的仲裁者和管理者,這樣,用戶數據永遠不會流過Namenode。

技術分享

客戶端

客戶端是用戶和HDFS進行交互的手段,HDFS提供了各種各樣的客戶端,包括命令行接口、java API、Thrift接口、C語言庫、用戶空間文件系統等

HDFS主要特性和體系結構