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