從問題域出發認識Hadoop生態系統

近些年來Hadoop生態系統發展迅猛,它本身包含的軟件越來越多,同時帶動了周邊系統的繁榮發展。尤其是在分佈式計算這一領域,系統繁多紛雜,時不時冒出一個系統,號稱自己比MapReduce或者Hive高效幾十倍,幾百倍。有一些無知的人,總是跟着瞎起鬨,說Impala將取代Hive,Spark將取代Hadoop MapReduce等。本文則從問題域觸發,解釋說明Hadoop中每個系統獨特的作用/魅力以及它們的不可替代性。

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等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章