瞭解分散式系統和Hadoop

出版圈郭志敏發表於2011-09-16

  摩爾定律在過去幾十年間對我們都是適用的,但解決大規模計算問題卻不能單純依賴於製造越來越大型的伺服器。有一種替代方案已經獲得普及,即把許多低端/商用的機器組織在一起,形成一個功能專一的分散式系統。

  為了理解盛行的分散式系統(俗稱向外擴充套件)與大型單機伺服器(俗稱向上擴充套件)之間的對比,需要考慮現有I/O技術的效能價格。對於一個有4個I/O通道的高階機,即使每個通道的吞吐量各為100 MB/sec,讀取4 TB的資料集也需要3個小時!而利用Hadoop,同樣的資料集會被劃分為較小的塊(通常為64 MB),通過Hadoop分散式檔案系統(HDFS)分佈在叢集內多臺機器上。使用適度的複製,叢集可以並行讀取資料,進而提供很高的吞吐量。而這樣一組通用機器比一臺高階伺服器更加便宜!

  前面的解釋充分展示了Hadoop相對於單機系統的效率。現在讓我們將Hadoop與其他分散式系統架構進行比較。一個眾所周知的方法是SETI @ home,它利用世界各地的屏保來協助尋找外星生命。在SETI @ home,一臺中央伺服器儲存來自太空的無線電訊號,並在網上釋出給世界各地的客戶端桌上型電腦去尋找異常的跡象。這種方法將資料移動到計算即將發生的地方(桌面屏保)。經過計算後,再將返回的資料結果儲存起來。

  Hadoop在對待資料的理念上與SETI@Home等機制不同。SETI @ home需要客戶端和伺服器之間重複地傳輸資料。這雖能很好地適應計算密集型的工作,但處理資料密集型任務時,由於資料規模太大資料搬移變得十分困難。Hadoop強調把程式碼向資料遷移,而不是相反。參考圖1-1,我們看到Hadoop的叢集內部既包含資料又包含計算環境。客戶端僅需傳送待執行的MapReduce程式,而這些程式一般都很小(通常為幾千位元組)。更重要的是,程式碼向資料遷移的理念被應用在Hadoop叢集自身。資料被拆分後在叢集中分佈,並且儘可能讓一段資料的計算髮生在同一臺機器上這段資料駐留的地方。

  這種程式碼向資料遷移的理念適合Hadoop面向資料密集型處理的設計目標。要執行的程式(“程式碼”)比資料在規模上小几個數量級,更容易移動。此外,在網路上移動資料要比在其上載入程式碼更花時間。不如讓資料不動,而將可執行程式碼移動到資料所在的機器上去。

  現在你知道Hadoop是如何契合分散式系統的設計了,那就讓我們看看它和通常的資料處理系統(SQL資料庫)比較會怎麼樣。

下一篇:比較SQL資料庫和Hadoop 摘自:《Hadoop實戰》

相關文章