Hadoop作爲一個生態系統,每個系統只解決某一個特定的問題域(甚至可能很窄),這也是Hadoop的魅力所在:不搞統一型的一個全能系統,而是小而精的多個小系統。本文重點討論分佈式計算領域的幾個開源系統可以解決的問題域。
(1)MapReduce:古老的分佈式計算框架,它的特點是擴展性、容錯性好,易於編程,適合 離線數據處理,不擅長流式處理、內存計算、交互式計算等領域。MapReduce網址是: http://hadoop.apache.org/
(2)Hive:披着SQL外衣的MapReduce。Hive是爲方便用戶使用MapReduce而在外面包了一層SQL,由於Hive採用了SQL,它的問題域比MapReduce更窄,因爲很多問題,SQL表達不出來,比如一些數據挖掘算法,推薦算法、圖像識別算法等,這些仍只能通過編寫MapReduce完成。Hive網址是: http://hive.apache.org/
(3)Pig:披着腳本語言外衣的MapReduce,爲了突破Hive SQL表達能力的限制,採用了一種更具有表達能力的腳本語言PIG。由於pig語言強大的表達能力,Twitter甚至基於Pig實現了一個大規模機器學習平臺(參考Twitter在SIGMOD2012的文章“Large-Scale Machine Learning at Twitter”)。Pig網址是: http://pig.apache.org/
(4)Stinger Initiative(Tez optimized Hive):Hortonworks開源了一個DAG計算框架Tez,該框架可以像MapReduce一樣,可以用來設計DAG應用程序,但需要注意的是,Tez只能運行在YARN上。Tez的一個重要應用是優化Hive和PIG這種典型的DAG應用場景,它通過減少數據讀寫IO,優化DAG流程使得Hive速度提供了很多倍。(Stinger正在開發中,Tez代碼: https://svn.apache.org/repos/asf/incubator/tez/branches/)
(5)Spark:爲了提高MapReduce的計算效率,伯克利開發了spark,spark可看做基於內存的MapReduce實現,此外,伯克利還在Spark基礎上包了一層SQL,產生了一個新的類似Hive的系統Shark,但目前Spark和Shark尚屬於實驗室產品。Spark網站是: http://spark-project.org/
(6)Storm/S4:Hadoop在 實時計算/流式計算領域(MapReduce假設輸入數據是靜態的,處理過程中不能被修改,而流式計算則假設數據源是流動的,數據會源源不斷流入系統),一直比較落後,還好,Twitter開源的Storm和yahoo!開源的S4彌補了這一缺點,Storm在淘寶,mediaV等公司得到廣泛的應用。Storm網址是: http://storm-project.net/,S4網址是: http://incubator.apache.org/s4/
(7)Cloudera Impala/Apache drill:Google Dremel的開源實現,也許是因爲 交互式計算需求太過強烈,發展迅猛,impala僅用了一年左右便推出1.0GA版本。這種系統適用於交互式處理場景,最後產生的數據量一定要少。Impala儘管發佈了1.0版本,但在容錯性、擴展性、支持自定義函數等方面,有很長的路要走。Cloudera Impala網址是:https://github.com/cloudera/impala,Apache drill網址是:http://incubator.apache.org/drill/。
Hortonworks將應用需求進行了如下劃分:
映射到上面幾種系統,可知:
(1)實時應用場景(0~5s):Storm、S4、Cloudera Impala,Apache Drill等;
(2)交互式場景(5s~1m):這種場景通常能要求必須支持SQL,則可行系統有:Cloudera Impala、Apache Drill、Shark等;
(3)非交互式場景(1m~1h):通常運行時間較長,處理數據量較大,對容錯性和擴展性要求較高,可行系統有:MapReduce、Hive、Pig、Stinger等;
(4)批處理場景(1h+):通常運行時間很長,處理數據量很大,對容錯性和擴展性要求很高,可行系統有:MapReduce、Hive、Pig、Stinger等。