淘寶Fourinone介紹及與Hadoop的性能PK
FourInOne(中文名字“四不像”)是一個四合一分布式計算框架,在寫這個框架之前,我對分布式計算進行了長時間的思考,也看了老外寫的其他開源框架,當我們把復雜的hadoop當作一門學科學習時,似乎忘記了我們想解決問題的初衷:我們僅僅是想寫個程序把幾臺甚至更多的機器一起用起來計算,把更多的cpu和內存利用上,來解決我們數量大和計算復雜的問題,當然這個過程中要考慮到分布式的協同和故障處理。如果僅僅是為了實現這個簡單的初衷,為什么一切會那么復雜,我覺的自己可以寫一個更簡單的東西,它不需要過度設計,只需要看上去更酷一點,更小巧一點,功能更強一點。于是我將自己對分布式的理解融入到這個框架中,考慮到底層實現技術的相似性,我將Hadoop,Zookeeper,MQ,分布式緩存四大主要的分布式計算功能合為一個框架內,對復雜的分布式計算應用進行了大量簡化和歸納。
fourinone-1.11.09 | hadoop-0.21.0 | |
體積 | 82K | 71M |
依賴關系 | 就一個jar,沒有依賴 | 約12項jar包依賴 |
配置 | 就一個配置文件 | 較多配置文件和復雜屬性 |
集群搭建 | 簡單,每臺機器放一個jar和配置文件 | 復雜,需要linux操作基礎和ssh等復雜配置,還需要較多配置文件配置 |
計算模式 | 提供兩種計算模式:包工頭和工人直接交互方式,包工頭和工人通過消息中樞方式交互,后者不需要工人節點可直接訪問 | 計算更多傾向于文件數據的并行讀取,而非計算過程的設計。JobTracke 跟TaskTracker直接交互, 查詢NameNode后,TaskTracker直接從Datanode獲取數據。 |
并行模式 | N*N,支持單機并行,也支持多機并行,多機多實例并行 | 1*N,不支持單機并行,只支持多機單實例并行 |
內存方式 | 支持內存方式設計和開發應用,并內置完整的分布式緩存功能 | 以hdfs文件方式進行數據處理,內存方式計算支持很弱 |
文件方式 | 自帶文件適配器處理io | Hdfs處理文件io |
計算數據要求 | 任意數據格式和任意數據來源,包括來自數據庫,分布式文件,分布式緩存等 | Hdfs內的文件數據,多傾向于帶換行符的數據 |
調度角色 | 包工頭,可以有多個,支持鏈式處理,也支持大包工頭對小包工頭的調度 | JobTracke,通常與NameNode一起 |
任務執行角色 | 農民工,框架支持設計多種類型的工人用于拆分或者合并任務 | TaskTracker,通常與Datanode一起 |
中間結果數據保存 | 手工倉庫,或者其他任意數據庫存儲設備 | Hdfs中間結果文件 |
拆分策略 | 自由設計,框架提供鏈式處理對于大的業務場景進行環節拆分數據的存儲和計算拆分根據業務場景自定義 | 以64m為拆分進行存儲,以行為拆分進行計算
實現map接口,按行處理數據進行計算 |
合并策略 | 自由設計,框架提供農民工節點之間的合并接口,可以互相交互設計合并策略,也可以通過包工頭進行合并 | TaskTracker不透明,較少提供程序控制,合并策略設計復雜
實現reduce接口進行中間數據合并邏輯實現 |
內存耗用 | 無需要制定JVM內存,按默認即可,根據計算要求考慮是否增加JVM內存 | 需要制定JVM內存,每個進程默認1G,常常namenode,jobtracker等啟動3個進程,耗用3G內存 |
監控 | 框架提供多環節鏈式處理設計支持監控過程,通過可編程的監控方式,給于業務開發方最大靈活的監控需求實現,為追求高性能不輸出大量系統監控log | 輸出較多的系統監控log,如map和reduce百分比等,但是會犧牲性能,業務監控需要自己實現 |
打包部署 | 腳本工具 | 上傳jar包到jobtracker機器 |
平臺支撐 | 支持跨平臺,windows支持良好 | 多傾向于支持linux,Windows支持不佳,需要模擬linux環境,并且建議只用于開發學習 |
其他 | 協同一致性、分布式緩存、通訊隊列等跟分布式計算關系密切的功能支持 | 不支持 |
總結: | Hadoop并不是為了追求一個并行計算的框架而設計,提供快捷和靈活的計算方式去服務各種計算場景, 它更多的是一個分布式文件系統,提供文件數據的存儲和查詢,它的map/reduce更傾向于提供并行計算方式進行文件數據查詢。而fourinone相反。 |
Fourinone和hadoop運行wordcount的對比測試(平均4核4g配置,輸入數據為文件):
fourinone-1.11.09(n*4) | fourinone-1.11.09(n*1) | hadoop-0.21.0(n*1) | |
3臺機器*256M | 4s | 12s | 72s |
3臺機器*512M | 7s | 30s | 140s |
3臺機器*1G | 14s | 50s | 279s |
19臺機器*1G | 21s | 60s | 289s |
10臺機器*2G | 29s | ||
5臺機器*4G | 60s |
說明:Fourinone可以充分利用單機并行能力,4核計算機可以4個并行實例計算,hadoop目前只能N*1;另外,可以由上圖看出,如果要完成20g的數據,實際上fourinone只需要使用5臺機器用60秒完成,比使用19臺機器完成19g的hadoop節省了14臺機器,并提前了200多秒
相關分布式框架(jar格式)及demo代碼下載:
http://download.csdn.net/detail/fourinone/3557912
http://www.skycn.com/soft/68321.html
作者介紹:
Stone.Peng
資深IT技術人士
現在淘寶網任高級專家,從事互聯網核心技術研究
之前在金蝶總體架構部任SOA架構師,負責設計ESB