2008年6月30日 星期一

Google社の基盤技術「MapReduce」についてエンジニアに聞く

谷歌大規模並行程式設計培訓課程“Academic Cluster Computing Initiative(ACCI)”的策劃人——高級軟體工程師克裏斯托夫·比希利亞(Christophe Bisciglia)接受了本站採訪。比希利亞目前正在上海從事有關服務開發方面的業務。

——在谷歌服務的基礎技術中,ACCI教授的是哪些技術?

比希利亞:並行處理的程式設計/作為設計模式的“MapReduce”和分佈式文件系統“GFS(Google File System)”。教材使用的是安裝了以上功能的開源軟體“Hadoop”。

——並行程式設計是不是會很難?

比希利亞:培訓對象為大學3~4年級學生,並不算太難。MapReduce本身也可以單機運行。作為設計模式,能夠保證擴大規模。

——但是,基於MapReduce的函數型程式設計模式絕不簡單,也不易掌握。

比希利亞:確實,MapReduce從函數型程式設計中得到了啟示。但並不是類似于ML和Scheme的函數語言。就像面向對象程式設計適合GUI那樣,MapReduce適合處理龐大的數據。目前,函數型程式設計已經應用到了從大量數據中提取、合成相應數據的操作之中。

  通過使用MapReduce,開發者將不再感到處理的複雜。例如在索引的編輯過程中,可以利用MapReduce製作以各種語句為鍵、值為 URL的“鍵值”對。各鍵值對相互獨立,彼此之間沒有依賴關係。因此可以同時並行處理。這發生在Map Phase中。在Reduce Phase中進行的是把上述在Map Phase中形成的數據進行匯總的作業。

——那樣的話,Reduce Phase是不是難以並行化?

比希利亞:沒錯。對於Reduce Phase,從並行化中得到的好處是當出現多個搜索請求時,各Reduce Phase是以獨立形式存在。在典型處理中,Map Phase的作業量較大。因此,即使Reduce Phase的並行性低,也能夠保持平衡。

——除了編輯索引以外,還有哪些應用?

比希利亞:還有日誌編輯和網路應用。對於GoogleDocs,每個用戶的操作是相互獨立的。MapReduce基本適合於需要保存大量數 據的處理和數據讀取處理。從這種意義上來說,應該還適合感測器網路的處理。因為從交通量數據和風速數據等大量數據中提取含義的作業不存在依賴關係。反而言 之,關係數據庫的處理就不容易擴大處理規模。

——不易擴大規模是不是說不適合雲計算?

比希利亞:雲計算是由基於MapReduce的大量數據儲存/合成處理,以及通過Ajax的網路介面輸入數據這二者的組合而成。因此,幾乎所有應用都可改用雲計算。

  雲計算能夠成為多個用戶進行共同作業的平臺,具有本地處理沒有的魅力。例如,“Google Docs”可供多個用戶編輯同一個文件。對於新元件和OS的支援也比較容易。只需要網頁瀏覽器。

  不過,需要大量圖形處理的遊戲則很難通過雲計算實現。當然,最近流行的MMORPG(Massively Multiplayer Online Role-Playing Game)不在此列。大多數遊戲可以通過雲計算實現。現在,利用雲計算的應用數量之多,是5年前無法想像的。

——Google File System怎樣確保並行性?

比希利亞:我們把系統分成了管理文件系統元數據的“Master”和管理真實數據的“Chunk伺服器”。文件分割為塊,Master管理 各個塊位於哪臺Chunk伺服器。塊的大小為64MB,事先會複製到大約3~4個伺服器上。Master也會保留副本。從表面上看,在該模式下,請求容易 集中到Master上,但Master伺服器的處理時間短,不會形成大的負荷。

——最近谷歌開始提供的應用軟體基礎服務——“Google App Engine”是通過組合GFS和MapReduce實現的嗎?

比希利亞:Google App Engine基本上是數據API。需要確保可擴展性,使大量用戶能夠訪問大型表格。而GFS主要用在低級別(接近系統)的文件系統中。(記者:北鄉 達郎)

■日文原文
Google社の基盤技術「MapReduce」についてエンジニアに聞く

沒有留言:

網誌存檔