Google 工程師今年開始到臺灣的
大學中擔任助教,培養雲端運算的
開發人力。(由左至右為 Google
工程師談偉航、謝毓庭和廖碩鵬)
攝影/楊易達 雲端運算的關鍵技術是 MapReduce,最早是由 Google 提出,後來也運用在開源的雲端技術 Hadoop 中。Google 臺灣工程研究所所長簡立峰說:「這是一種解決問題的程式開發模型。」
和傳統開發模式相比,簡立峰表示:「使用 MapReduce 模式,開發人員在拆解問題的過程中,就要先對問題進行平行化處理。」開發人員需要先分析問題的解決流程,找出可以利用平行運算來處理資料的部分,也就是那些能夠被切成小段分開來處理的資料,再針對可以採用平行處理的部分寫成 Map 程式。
有了 Map 程式之後,就可以使用大量機器用執行 Map 程式,分別同步處理分析每一段資料,再將每一個 Map 程式分析出來的結果,透過 Reduce 程式進行合併,最後則彙整出完整的結果。
MapReduce 的運作方式很像選舉開票,Yahoo 亞洲區科技研發工程部總監許明彥說:「只要大家都遵守固定的開票程序,那由誰來開票其實都沒有影響。所以,中選會可以將開票任務分配給各地投票所,各自負責所屬的票箱,最後再向中選會回報各開票所的開票結果,中選會再統一彙整,就能算出全國的開票結果,這樣就不需要把幾百萬張選票都運回中選會處理。」各投票所的開票任務就像是 Map 程式,負責處理少量資料,而 Reduce 程式就是中選會彙整投票結果的動作。
開發者將問題拆解成 MapReduce 的程式後,就可以交由雲端運算的平臺來執行,例如 Hadoop.Hadoop 框架中的 Master 機器會將開發者的 MapReduce 程式分配給有空閒的伺服器,一群伺服器先執行 Map 程式來處理切割過的小塊資料。再將分析後的結果,送到執行 Reduce 程式的機器中混合、排序與彙整。最後再把彙整後的結果輸出給開發者。
不過,國家高速網路與計算中心助理研究員王耀聰認為 MapReduce 不一定能有效處理各種問題,他舉例,像目前的生物研究資訊都是採用 XML 格式,要轉換成 Key-Value 資料庫架構的設計方式,程式開發並不容易。
趨勢科技研究開發部專案經理楊覲寧則認為:「MapReduce 使用 Script 語法,除錯不易,而且不見得所有工作都要用 MapReduce 來處理。」她解釋,像資料加解密,用 CGI 程式來處理反而比較快,只要先將 CGI 程式安裝到所有雲端運算的機器上,還是可以透過 Master 機器來分配任務。
不過,Google 軟體工程師談偉航解釋:「理論上透過多階段的 MapReduce,可以組合出各種解決問題的路徑。但關鍵還是對問題本身的了解,如果開發者越清楚,就越能知道拆解出問題的路線。」簡立峰認為,臺灣資工系大學部二年級的訓練課程就足以學習雲端運算技術。
目前臺灣 Google 固定和大學合作,派工程師擔任課堂助教,教導學生學習雲端運算的技術,簡立峰希望每年都能輪流到不同大學與教授合作開課,他說:「只要培養 1年,就可以有上千人學會雲端運算技術,學生進入就業市場後,臺灣企業也就學到了。」
MapReduce 是雲端運算的關鍵技術,將要執行的問題,拆解成 Map 和 Reduce 的方式來執行,以達到分散運算的效果。例如要搜尋哪些網頁中有 「iThome」 這個 字,可以先用 Map 程式,來計算出所有網頁中,每一個字的位置。再使用 Reduce 程式,在每一個字的清單中,篩選出 「iThome」 這個字,所對應的網 頁網址。
不論 Google 或 Yahoo 所採用的 MapReduce 執行概念相同,只是儲存的檔案系統不同 (Google 是 GFS,而 Yahoo 是 HDFS)。MapReduce 程式的執行過程如下:
將要執行的 MapReduce 程式複製到 Master 與每一臺 Worker 機器中。
Master 決定 Map 程式與 Reduce 程式,分別由哪些 Worker 機器執行。
將所有的資料區塊,分配到執行 Map 程式的 Worker 機器中進行 Map。
將 Map 後的結果存入 Worker 機器的本地磁碟。
執行 Reduce 程式的 Worker 機器,遠端讀取每一份 Map 結果,進行彙整與排序,同時執行 Reduce 程式。
將使用者需要的運算結果輸出。