大數據計算框架除了 MapReduce 還有哪些呢,不應該是 MapReduce 去解決所有問題吧?

現在談大數據必說MapReduce,好像MapReduce就是大數據的代名詞,希望能夠更完整、更專業的解釋


在Hadoop生態系統中有很多技術

HDFS,大數據的存儲,利用便宜的PC機組成的集群存儲大量的數據,支持故障恢復

MapReduce,大數據處理,利用便宜的PC機組成集群的批量處理大量的數據,支持分散式並行計算以及故障轉移

HBase,基於HDFS的NoSql資料庫

Hive,基於HDFS的資料庫和查詢引擎,主要是提供類似SQL的方式對HDFS上的數據進行查詢

Mahout,大數據處理的機器學習框架

Pig,基於MapReduce的數據流程,提供DAG

HCatalog,元數據框架

Oozie,Hadoop上的任務調度流程

Sqoop,完成大數據平台與關係型資料庫的數據雙向遷移

Splunk

Flume,基於大數據平台的系統日誌處理

Storm,流式處理框架

Spark,新型的大數據處理框架,提供基於RDD的DAG,為批量,流式,互動式,機器學習提供了統一的處理框架

Tez,另一種大數據框架,包括ORCFile,DAG,和優化的Hive

Impla,基於大數據平台的查詢引擎


還有許多種。如面向內存迭代運算的spark,專門針對流式計算的storm等等;只是相比之下,在Hadoop體系中MapReduce是最常用最成熟的計算框架,許多更高級的計算體系都是基於MapReduce實現的,如Hive,Pig以及機器學習包Mahout,與R語言結合的RHADOOP等。

當然不會用MapReduce解決所有問題,MapReduce的容錯能力超強,適合處理巨大規模集群(幾百上千個節點)下長時間非實時的大計算任務;但其實時性較差,對實時性要求高的計算一般就不採用MapReduce了,而會使用上面提到的Storm和Spark。

由於MapReduce過於低層,編寫代碼非常繁瑣,所以即使適合它完成的運算,一般也會使用更高級的Hive和PIG來做。另外還有Cloudera提供的不基於MapReduce的SQL產品Impala也可以處理Hadoop內的大數據。

對於更常見的中小規模(十幾到幾十個節點)的集群,MapReduce的超強容錯能力意義不大(機器在這個規模壞掉概率沒那麼大了),反而由於總要使用外存交換數據導致低下的性能,這時候可採用潤乾公司(就是那做報表的)開發的集算器(潤乾公司計算系列產品),可以靈活地決定使用內存或外存交換數據,而且提供的類庫豐富,編寫代碼比MapReduce要輕鬆得多,性能也會高出不少。不僅可以訪問HDFS,也支持使用本地文件系統的輕量級方案。

每種計算框架都有自己適合的場景,不可能只用一種搞定一定問題,MapReduce的2.0版Yarn就把自己搞成了一個計算框架管理器,允許更多種計算框架融在一起。例外的是,spark似乎揚言要包打天下,它本來支持內存交換帶來的高性能,並且支持函數式語法以方便編寫,還宣稱要支持不亞於MapReduce的超大規模的強容錯(這裡,spark的主要貢獻人在提及與Impala的差異時說,Apache Hadoop: How does Impala compare to Shark?。impala因為用了本地編譯技術,性能很好,這裡有講:Inside Cloudera Impala: Runtime Code Generation,但容錯性一般般,),有興趣的話可以一試,不過scala 語言(spark基於並使用scala)看起來簡單,深入掌握並不容易。


濕了,MR是編程模型


著作權歸作者所有。

商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

作者:千鋒互聯教育

鏈接:大數據分析的框架有哪些,各自有什麼特點_百度知道

來源:百度知道

主流的大數據分析平台構架

1 Hadoop

Hadoop 採用 Map Reduce 分散式計算框架,根據 GFS開發了 HDFS 分散式文件系統,根據 Big Table 開發了 HBase數據存儲系統。Hadoop 的開源特性使其成為分散式計算系統的事實上的國際標準。Yahoo,Facebook,Amazon 以及國內的百度,阿里巴巴等眾多互聯網公司都以 Hadoop 為基礎搭建自己的分布。

2 Spark

Spark 是在 Hadoop 的基礎上進行了一些架構上的改良。Spark 與Hadoop 最大的不同點在於,Hadoop 使用硬碟來存儲數據,而Spark 使用內存來存儲數據,因此 Spark 可以提供超過 Ha?doop 100 倍的運算速度。由於內存斷電後會丟失數據,Spark不能用於處理需要長期保存的數據。

3 Storm

Storm是 Twitter 主推的分散式計算系統。它在Hadoop的基礎上提供了實時運算的特性,可以實時的處理大數據流。不同於Hadoop和Spark,Storm不進行數據的收集和存儲工作,它直接通過網路實時的接受數據並且實時的處理數據,然後直接通過網路實時的傳回結果。

4 Samza

Samza 是由 Linked In 開源的一項技術,是一個分散式流處理框架,專用於實時數據的處理,非常像Twitter的流處理系統Storm。不同的是Samza 基於 Hadoop,而且使用了 Linked In 自家的 Kafka 分散式消息系統。

Samza 非常適用於實時流數據處理的業務,如數據跟蹤、日誌服務、實時服務等應用,它能夠幫助開發者進行高速消息處理,同時還具有良好的容錯能力。


基礎理論四大法寶:

Streaming

External Memory

Parallel Computing

Distributed Computing

mapreduce只是分散式計算中的一小塊,還有很多其他有趣的思想,有的甚至70年代就已經出現了。搞清這些腦洞才是磨刀大法。

推薦入門讀物:Mining of Massive Datasets. Rajaraman


users area treated like animals by mapreduce, but are treated carefully on flink


Apache Spark:該技術採用內存計算,從多迭代批量處理出發,允許將數據載入內存做反覆查詢,此外還融合數據倉庫、流處理和圖計算等多種計算範式,Spark用Scala語言實現,構建在HDFS上,能與Hadoop很好的結合,據說速度比MapReduce快100倍。


http://web.engr.illinois.edu/~adityagp/courses/cs598/papers/rdds.pdf

Resilient Distributed Datasets: A Fault-Tolerant Abstraction for
In-Memory Cluster Computing


建議題主去讀spark rdd那篇論文,在第7節和第8節提到了多種計算模型,並與spark做了對比。


推薦閱讀:

到現在為止,NoSQL運動給資料庫系統留下什麼寶貴的思想?
為什麼很多分散式系統都是以DAG(Directed acyclic graph )實現運算的?
分散式系統工程如何搭建,有沒有一套完整的系統的實踐方法論,比如,存儲服務?
分散式系統工程師要不要轉行做機器學習?
一名分散式存儲工程師的技能樹是怎樣的?

TAG:Hadoop | 數據倉庫 | 分散式系統 | HBase |