Hadoop是流行的大數(shù)據(jù)并行計(jì)算體系,廉價(jià)橫向擴(kuò)展是它的主要特點(diǎn)。但Hadoop的廉價(jià)指的是硬件和軟件授權(quán)成本,而不是總體成本。在學(xué)習(xí)成本、開(kāi)發(fā)成本、管理成本上Hadoop并不總是占優(yōu),有時(shí)候甚至連硬件成本也不占優(yōu)。
學(xué)習(xí)成本高。Hadoop的生態(tài)系統(tǒng)龐大,包括了幾十種相關(guān)的產(chǎn)品,常見(jiàn)的就有:MapReduce、HDFS、Hive、hbase、YARN、Zookeeper、Avro、JAQL、PIG、solr、mesos、shark、stream、storm。熟悉這些產(chǎn)品的部署步驟、功能特性、開(kāi)發(fā)方法都需要付出高昂的學(xué)習(xí)成本。
挑選與產(chǎn)品匹配的Hadoop版本也不輕松。Hadoop版本混亂,有一代和二代之分,每一代有十幾個(gè)版本,各有不同的新特性,比較穩(wěn)定的有:0.20.x、0.21.x、0.22.x、1.0.x、0.23.x、2.x等。
由于Hadoop不夠成熟,商品化程度不足,用戶在進(jìn)入開(kāi)發(fā)階段后必須持續(xù)學(xué)習(xí),這樣才能及時(shí)替換有bug或有性能缺陷的產(chǎn)品和版本。雖然有些商業(yè)化較成熟的版本,如Cloudera或HorontWorks,但仍然不能做到足夠穩(wěn)定。另外,在設(shè)計(jì)和開(kāi)發(fā)前不要忘記學(xué)習(xí)Hadoop的開(kāi)發(fā)框架,它的結(jié)構(gòu)非常復(fù)雜,經(jīng)常要深讀源代碼才能恍然大悟。
開(kāi)發(fā)成本高。 Hadoop以MapReduce編程為基礎(chǔ)。MapReduce缺乏底層函數(shù),計(jì)算功能不專業(yè),尤其是結(jié)構(gòu)化數(shù)據(jù)的計(jì)算函數(shù),它幾乎一個(gè)都沒(méi)有提供,程序員需要自行實(shí)現(xiàn)這些算法:過(guò)濾、統(tǒng)計(jì)、唯一值、交集、排序、排名、比上期、同期比、相對(duì)位置計(jì)算、區(qū)間計(jì)算等,隨便哪個(gè)都要寫(xiě)出幾十甚至上百行的代碼,而且還難以通用,每次有新任務(wù)時(shí)又要重寫(xiě)。
為了彌補(bǔ)結(jié)構(gòu)化計(jì)算函數(shù)缺乏的弱點(diǎn),Hive等工具誕生了,為Hadoop增加了類SQL的特性。但這種類SQL功能有限,比起窗口函數(shù)、存儲(chǔ)過(guò)程來(lái)還有很大差距,用戶仍然要經(jīng)常通過(guò)MapReduce來(lái)解決HiveQL難以實(shí)現(xiàn)的功能。為了實(shí)現(xiàn)商業(yè)計(jì)算中常見(jiàn)的業(yè)務(wù)邏輯,Hadoop用戶需要聘請(qǐng)更多的資深程序員,需要組建一只豪華的開(kāi)發(fā)團(tuán)隊(duì),時(shí)間成本和人力成本耗費(fèi)巨大。即使這樣,仍然有很多復(fù)雜的業(yè)務(wù)邏輯是Hadoop難以實(shí)現(xiàn)的。
小集群硬件成本高。如果集群規(guī)模較小,比如十臺(tái)以下, Hadoop的硬件成本有時(shí)候會(huì)比數(shù)據(jù)庫(kù)還高。這是因?yàn)镠adoop的強(qiáng)容錯(cuò)機(jī)制會(huì)把任務(wù)拆分得很細(xì)再分給不同節(jié)點(diǎn)機(jī)去處理,并將中間結(jié)果存儲(chǔ)在文件系統(tǒng),如此一來(lái)就會(huì)出現(xiàn)調(diào)度成本高且硬盤(pán)IO頻繁的現(xiàn)象,從而導(dǎo)致性能降低,需要更多的機(jī)器才能達(dá)到期望的性能。而數(shù)據(jù)庫(kù)主要是批量數(shù)據(jù)內(nèi)存計(jì)算,性能高得多,同配置情況下單臺(tái)數(shù)據(jù)庫(kù)相當(dāng)于數(shù)臺(tái)Hadoop節(jié)點(diǎn)機(jī),成本有時(shí)更低。
管理成本高。 Hadoop在小集群時(shí)硬件成本高,只有集群規(guī)模大到一定地步后才能攤低硬件成本,這也是Hadoop的核心優(yōu)勢(shì):廉價(jià)橫向擴(kuò)展。大集群的硬件單位成本低,但昂貴的管理成本往往會(huì)抵消這種優(yōu)勢(shì)。比如在小規(guī)模情況下可被忽略的電費(fèi)在這種場(chǎng)合就變成很重要了,大集群意味著龐大的節(jié)點(diǎn)數(shù)量,意味著巨大的電能消耗,所以數(shù)據(jù)中心常常建設(shè)在發(fā)電廠附近。另外場(chǎng)地費(fèi)也不容忽視,大集群需要更多的機(jī)架、更大的機(jī)房、更復(fù)雜的冗余電力系統(tǒng),建造成本或租金自然昂貴。最后是人力,大集群需要更多的維護(hù)管理人員才能運(yùn)轉(zhuǎn),費(fèi)用同樣不低。
總體來(lái)看,Hadoop并不是個(gè)低成本的方案,用戶也不應(yīng)該被硬件成本低所迷惑,而是應(yīng)該根據(jù)自身的實(shí)際情況選擇總成本更低的解決方案,數(shù)據(jù)庫(kù)、開(kāi)源或免費(fèi)軟件都可以在選擇之列。
在電力、場(chǎng)地、人力等管理成本昂貴的地區(qū),用戶可以考慮使用數(shù)據(jù)庫(kù)。除了建造數(shù)據(jù)中心可以節(jié)省開(kāi)支,數(shù)據(jù)庫(kù)的學(xué)習(xí)成本和開(kāi)發(fā)成本也比Hadoop低得多。
如果要實(shí)時(shí)分析流式大數(shù)據(jù),開(kāi)源項(xiàng)目Hydra是個(gè)更好的選擇,它的底層架構(gòu)就是為日志類的流數(shù)據(jù)設(shè)計(jì)的,性能比Hadoop更高。
對(duì)于中小集群而言,免費(fèi)軟件集算器是個(gè)更好的選擇,它開(kāi)發(fā)成本低,擅長(zhǎng)業(yè)務(wù)規(guī)則較復(fù)雜的商業(yè)計(jì)算,性能比Hadoop高數(shù)倍。
總之,我們應(yīng)該謹(jǐn)記Hortonworks首席技術(shù)官EricBaldeschwieler關(guān)于成本的陳述:硬件成本只占Hadoop數(shù)據(jù)中心總成本的20%。