Hadoop文件系統HDFS的巧妙設計

HDFS Hadoop MapReduce 技術妞妞 2017-06-10

上一篇文章我們只是簡單的介紹了Hadoop的文件系統,但是對於整個文件系統的管理以及維護我們還並不是很瞭解,面對一個文件大小已經到達GB的處理文件,當個機器來跑一段即便只是來統計文件中單詞的個數,可能都會垮掉,而我們Hadoop的HDFS的分佈式存儲以及之後我們會講到的Map-Reduce都非常擅長處理GB級別的文件。

HDFS的設計

HDFS以流式數據訪問模式來存儲超大文件,主要處理的文件指的就是幾百MB,幾百GB甚至幾百TB大小的文件,一次寫入,多次讀取是HDFS的設計思路。把超大的數據文件劃分成數據塊,並且將數據塊作為進行數據讀寫的最小單位。一般HDFS中的塊比磁盤的塊要大,這是為了在分佈式計算或者是為了保障高可用性時進行復制減少尋址開銷。對於分佈式文件系統中設置塊

首先:一個文件的大小可以大於分佈式系統中任意一個磁盤的容量。文件的所有塊都不用存儲在同一個磁盤商行,可以利用集群中的任意一個磁盤進行存儲。

其次:在集群中某個節點掛掉後,這個節點上所存儲的塊都會丟失,但是可以從其他節點上得到對應的塊進行拷貝(因為同樣的數據塊會進行拷貝放到不同的節點上)。數據塊的存在對數據備份,以及數據容錯性和提高可用性都是非常必要的。

Hadoop文件系統HDFS的巧妙設計

HDFS的管理

一個超大文件被劃分成多個數據塊,首先我們必須保存文件和數據塊的映射關係,知道哪些數據塊是屬於一個文件的。另外,我們還必須保障數據塊和集群節點的映射關係,哪些數據塊在哪個節點上面,當集群中的某一個節點掛掉的時候,就能及時瞭解到哪些數據塊的備份少了一個,能夠及時對相應的塊進行拷貝到其他空閒的節點上。

HDFS的管理機制也就決定了在HDFS集群中有兩類節點以管理者-工作者模式運行。管理者也就是namenode,工作者則是datanode,通常管理者只有一個,而工作者則會有多個,但是由於管理者保存元數據,一旦掛掉整個HDFS集群將癱瘓。所以,在Hadoop2.X增加HA,提供的備用的datanode。

Hadoop文件系統HDFS的巧妙設計

datanode是客戶端進入Hadoop的入口,管理文件系統的命名空間。保存了類似文件名、文件大小、文件權限,它有每個文件中各個塊所在的節點信息,但是並不會保存,在Hadoop開啟後那些工作者datanode會向namenode上報節點都datanode上都存儲了哪些數據塊。

Datanode上可以放多個數據塊,這些數據塊通常是不同,這樣能保證當這個datanode所在的節點掛掉能進行拷貝恢復。

Namenode和datanode之間存在著心跳機制,namenode會每隔一段時間檢測是否有datanode所在的節點是否會掛掉,當發現掛掉時就進行拷貝。

Hadoop文件系統HDFS的巧妙設計

這只是HDFS 大體的工作機制,其實在提高可用性、容錯性方面HDFS還有很多策略,比如SecondaryNameNode還有HA。

相關推薦

推薦中...