HDFS主要特性和體系結構

引言

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

HDFS的主要特性

1. HDFS有如下幾個主要特色:java

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

集羣規模動態擴展:節點動態加入到集羣,能夠數百數千個apache

流式數據讀寫:HDFS的設計思想「一次寫入,屢次讀取」,一個數據集一旦由數據源生成,就會被複制分發到不一樣的存儲節點中,而後響應各類各樣的數據分析任務請求。HDFS處理的應用通常是批處理,而不是用戶交互式處理,注重的是數據的吞吐量而不是數據的訪問速度。安全

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

2. HDFS的侷限性:網絡

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

沒法高效存儲大量小文件:namenode節點在內存中存儲整個文件系統的元數據,所以文件的數量就會受到限制,每一個文件的元數據大約150字節分佈式

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

HDFS的體系結構

在一個全配置的集羣上,運行HDFS意味着在網絡分佈的不一樣服務器上運行一些守護進程(daemon),這些進程有各自的特殊角色,並相互配合,一塊兒造成一個分佈式文件系統

數據塊

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

HDFS被設計成支持大文件,適用HDFS的是那些須要處理大規模的數據集的應用。這些應用都是隻寫入數據一次,但卻讀取一次或屢次,而且讀取速度應能知足流式讀取的須要。HDFS支持文件的「一次寫入屢次讀取」語義。一個典型的數據塊大小是64MB。於是,HDFS中的文件老是按照64M被切分紅不一樣的塊,每一個塊儘量地存儲於不一樣的Datanode中。

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

一、HDFS能夠保存比存儲節點單一磁盤大的文件

文件塊能夠保存在不一樣的磁盤上

二、簡化了存儲子系統

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

三、方便容錯,有利於數據複製

數據塊會在不一樣的機器上進行復制(通常副本數爲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語言庫、用戶空間文件系統等

參考資料

一、http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html

二、《Hadoop技術內幕 深刻解析HADOOP COMMON和HDFS架構設計與實現原理》

相關文章
相關標籤/搜索