基於map-shffle-reduce,google的一些開發人員也實現了另外一些好用的並行計算編程框架,FlumeJava就是其中的一種。
從介紹來看,FlumeJava的出發點應該是map-reduce job不是那么容易寫,並且如果一個任務需要很多的map-reduce過程結合就更麻煩了。而且當一連串的map-reduce需要運行的時候,如何優化也不是件容易的事情。
FlumeJava讓並發編程更容易的設計基礎是,將map-shuffle-combine-reduce作為meta元素融合進來,並且提供一些基本的運算函數,比如count,group,join,這使得一些常見的編程任務變得比較容易。
當用戶有一連串的並發任務要一起運行的時候,FlumeJava還會嘗試進行優化,采取的辦法有經典的loop fusion優化,也有傳統數據庫使用的push down condition優化,優化的核心基礎是減少文件IO,減少重復運行的任務,減少通信。
試驗證明,FlumeJava的代碼量比普通的map-reduce job少20%以上,並且執行效率也接近人工優化之后的map-reduce job。
整體上看,FlumeJava主要是工程問題,開發人員考慮的是如何更簡單的進行並發編程,而不是簡單的提出一種新模型、新概念,這個務實的精神是google一貫的風格。
讓我感興趣的是FlumeJava的開發人員之前曾經開發了另外一款並發編程框架,叫做LumberJack,實踐證明,該工具很難用,於是FlumeJava誕生並贏得了不少開發人員的喜歡。比起現實中有些開發人員不關注用戶,只關注高深代碼,這層次高太多了。
