常見分布式計算框架特點
Hadoop:
Hadoop在使用原理上基本上遵照了Map、Reduce這樣的一種模式進行項目的實際開發與交互,將一個個任務分解成映射與合并兩種方式,然而通過映射進行分類與簡化,從而產生部分歸并結果,然后對同類結果進行歸并計算;
由于Hadoop的中間結果需要依托于hdfs,從而需要經歷硬盤及網絡io的過程所以在實時性方面表現稍差;
Hadoop主要處理hdfs上的文本文件,而文本文件內容本身也是半結構化的;
之前的資源調度就是靠其中的master,之后hadoop2.0之后引入yarn進行資源的統一管理;
Spark:
Spark的原理是將任務進行分解,并且在每一步任務上進行相應的操作處理,同時根據操作處理順序構建DAG圖,從而應用DAG引擎進行相關操作。
由于Spark在進行處理時主要使用內存所以基本可以做到實時性,同時,在進行DAG引擎優化方面對速度也有一定程度提升;
Spark本身是通過DAGScheduler與TaskScheduler實現任務調度以及計算節點切換,現在mesos及yarn都對spark進行了一定程度的支持;
Spark的數據模型使用RDD這種彈性的存儲,并且基于該數據模型構建了相應的數據依賴,從而實現一定的容錯機制;
Spark基本上都運行在內存中,可以使用yarn或者mesos進行資源的統一管理,然后在上面進行spark的相關任務調度;
Storm:
Storm是基于消息源(spout)獲取數據發送信息,并且將信息發送到bolt形成相應的tuple,之后在此基礎上繼續構建數據的處理規則,處理規則需要認為變成實現;
Storm本身是流式數據處理,所以在實現實時性方面有一定的優勢;
Storm的數據模型沒有體現依賴關系,沒有進行特別的存儲結構設計,同時在數據模型處理方面僅僅進行結構設計而沒有進行優化;
資源調度以及使用方面直接按照用戶的i自定義方式進行,需要用戶編寫大量的流程控制問題,同時沒有在資源啊隔離放main做些謝智導致可能出現局部任務影響全局的問題;
LinkedIn Samza:
領英出品,主要結合kafka的設計思想將數據進行分塊,同時保證數據的局部有序性,而任務調度方面進行簡單操作后進行輸入與輸出。
進行實時數據流處理,并且綜合了Kafka這樣的消息隊列;
通過類似于Kafka的數據結構,實現消息的分區、局部有序以及消息的重讀機制,同時配合持久化方法可實現滑動窗口;
資源的管理主要借助于Yarn,利用消息隊列的方式顯現消息處理,同時通過備份方式顯示數據局部容錯;
Yahoo Apache S4:
Yahoo出品,與Storm比較類似,基于每個節點處理不同的功能,同樣是組成了一個DAG圖去描述數據處理工作。
在雅虎內部使用,完成每秒數以千計的搜索查詢。
以事件沒基礎進行設計,將每一次數據當成是一個事件來處理
使用ZooKeeper進行分布式數據的管理,在內部實現了負載均衡、容錯、分發、路由等功能;