HDFS作為一種新興的并行文件系統,和現有的分布式文件系統相似,他們都是運行在普通硬件之上的分布式文件系統,然而HDFS與其他分布式文件系統也存在著一些差別。如HDFS具有高容錯性,可以部署在低成本的硬件之上,同時放松了對POSIX的需求,使其可以以流的形式訪問文件數據,非常適合大數據集的應用程序。分析研究HDFS與其他并行文件系統的相同點和不同點,能夠深入了解HDFS系統的應用場景和設計理念。 (1)訪問的透明性,用戶能通過相同操作來訪問本地文件和遠程文件。HDFS可以做到這一點,但如果HDFS設置成本地文件系統,而不是分布式,那么HDFS的應用程序可以直接讀寫本地文件,只需要修改配置文件。可見,HDFS提供的訪問透明性是不完全的,畢竟它構建于java之上,不能像NFS和Lustre那樣去修改Unix內核,同時將本地文件和遠程文件以一致地方式處理。 (2)并發控制,客戶端對文件的讀寫不應該影響其他客戶端對同一個文件的讀寫。要想實現這種單個文件拷貝語義,分布式文件系統需要做出復雜的交互,例如采用時間戳、采用互斥、原子操作等。而HDFS采用的機制非常簡單,任何時間都只允許一個客戶端進行寫操作。當客戶端需要寫文件時,會對這個文件申請一個租約,只有這個租約被釋放,別的客戶端才能申請對這個文件的寫操作。文件經創建并寫入關閉之后不再改變,它的模型是“Write-Once-Read-Many”。 (3)資源移動策略,HDFS支持“移動計算到數據”。若一個Map任務是對某個數據塊的操作,則這個操作必定是在存儲這個數據塊的節點上完成的,同時HDFS支持數據的多副本(默認為3個副本),存儲任一副本的節點都可以執行Map任務的操作,JobTracker會把任務分配給距離客戶端最近的,且存有副本的節點。 通過上面三方面的比較,可以深入的理解HDFS的優點和缺點,以及HDFS的設計應用場景。對于追求海量數據的高吞吐量、批量處理任務HDFS無疑能發揮巨大的威力,但是對文件的隨機讀寫卻并不適合。同時,HDFS也不適合對低延時訪問、大量小文件的存儲及處理。
|