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