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