最近在Quora上有人提到一個問題,有關(guān)Hadoop分布式文件系統(tǒng)和OpenStack對象存儲的不同。
問題原文如下:
“HDFS (Hadoop分布式文件系統(tǒng))和OpenStack對象存儲(OpenStack Object Storage)似乎都有著相似的目的:實現(xiàn)冗余、快速、聯(lián)網(wǎng)的存儲。什么樣的技術(shù)特性讓這兩種系統(tǒng)因而不一樣?這兩種存儲系統(tǒng)最終趨于融合是否大有意義?”
問題提出之后,很快有OpenStack的開發(fā)者進行了回復(fù)。本文在此摘抄了前兩名回復(fù)進行翻譯,以供各位參考。
排名第一的答案來自RackSpace的OpenStack Swift開發(fā)者Chuck Their:
雖然HDFS與Openstack對象存儲(Swift)之間有著一些相似之處,但是這兩種系統(tǒng)的總體設(shè)計卻大不一樣。
1. HDFS使用了中央系統(tǒng)來維護文件元數(shù)據(jù)(Namenode,名稱節(jié)點),而在Swift中,元數(shù)據(jù)呈分布式,跨集群復(fù)制。使用一種中央元數(shù)據(jù)系統(tǒng)對HDFS來說無異于單一故障點,因而擴展到規(guī)模非常大的環(huán)境顯得更困難。
2. Swift在設(shè)計時考慮到了多租戶架構(gòu),而HDFS沒有多租戶架構(gòu)這個概念。
3. HDFS針對更龐大的文件作了優(yōu)化(這是處理數(shù)據(jù)時通常會出現(xiàn)的情況),Swift被設(shè)計成了可以存儲任何大小的文件。
4. 在HDFS中,文件寫入一次,而且每次只能有一個文件寫入;而在Swift中,文件可以寫入多次;在并發(fā)操作環(huán)境下,以最近一次操作為準。
5. HDFS用Java來編寫,而Swift用Python來編寫。
另外,HDFS被設(shè)計成了可以存儲數(shù)量中等的大文件,以支持數(shù)據(jù)處理,而Swift被設(shè)計成了一種比較通用的存儲解決方案,能夠可靠地存儲數(shù)量非常多的大小不一的文件。
排名第二的答案來自Joshua McKenty,他是美國宇航局Nebula云計算項目的首席架構(gòu)師,是OpenStack Nova軟件的早期開發(fā)者之一,目前是OpenStack項目監(jiān)管委員會的成員,還是Piston.cc這家基于OpenStack的公司的創(chuàng)始人。
Chuck剛才詳細介紹了兩者的技術(shù)差異,但是沒有討論兩者可想而知的融合,OpenStack設(shè)計峰會上拋出了融合這個話題。簡而言之,HDFS被設(shè)計成可以使用Hadoop,跨存儲環(huán)境里面的對象實現(xiàn)MapReduce處理。對于許多OpenStack公司(包括我自己的公司)來說,支持Swift里面的處理是路線圖上面的一個目標,不過不是每個人都認為MapReduce是解決之道。
我們已討論過為HDFS編寫包裝器,這將支持OpenStack內(nèi)部存儲應(yīng)用編程接口(API),并且讓用戶可以針對該數(shù)據(jù)來執(zhí)行Hadoop查詢。還有一個辦法就是在Swift里面使用HDFS。但是這些方法似乎沒有一個是理想的。
OpenStack社區(qū)方面也在開展研究開發(fā)方面的一些工作,認真研究其他替代性的MapReduce框架(Riak和CouchDB等)。
最后,現(xiàn)在有別的一些存儲項目,目前“隸屬于”OpenStack社區(qū)(SheepDog和HC2)。充分利用數(shù)據(jù)局部性,并且讓對象存儲變得“更智能”,這是預(yù)計會取得進步的一個領(lǐng)域。