㈠ 聊聊批計算、流計算、Hadoop、Spark、Storm、Flink等等
批:處理離線數據,冷數據。單個處理數據量大,處理速度比流慢。
流:處理在線,實時產生的數據。單次處理的數據量小,但處理速度更快。
Spark是UC Berkeley AMP lab所開源的類Hadoop MapRece的通用並行框架。
Spark,擁有Hadoop MapRece所具有的優點;但不同於MapRece的是Job中間輸出結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用於數據挖掘與機器學習等需要迭代的MapRece的演算法。
Spark 是一種與 Hadoop 相似的開源集群計算環境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負載方面表現得更加優越,換句話說, Spark 啟用了RDD(彈性分布式數據集),除了能夠提供互動式查詢外,它還可以優化迭代工作負載。RDD可以常駐內存的屬性,大大簡化了迭代計算所需的開銷,Spark任務可以立馬利用上一次計算出來的RDD來進行下次迭代。
Apache Hadoop中的MapRece是屬於離線計算技術;
Spark中Spark Core屬於離線計算技術,只不過它基於內存存儲中間結果,速度上比MapRece 快很多倍,又離實時計算技術很近;
Spark中Spark Streaming 子項目屬於實時計算技術,類似於Storm;
Spark中SparkSQL屬於離線計算技術,只不過它基於內存存儲中間結果,速度上比Hive快很多倍。
Spark並不是要成為一個大數據領域的「獨裁者」,一個人霸佔大數據領域所有的「地盤」,而是與Hadoop進行了高度的集成,兩者可以完美的配合使用。Hadoop的HDFS、Hive、HBase負責存儲,YARN負責資源調度;Spark負責大數據計算。實際上,Hadoop+Spark的組合,可以解決絕大部分大數據的場景。
Spark逐漸形成了一套完整的生態系統,既能夠提供內存計算框架,也可以支持SQL 即席查詢、實時流計算、機器學習和圖計算等。
Spark所提供的生態,可以支持如下3中場景:
一棧式解決方案(one stack to rule them all)
Spark包含了大數據領域常見的各種計算框架:
Spark streaming批量讀取數據源中的數據,然後把每個batch轉化成內部的RDD。Spark streaming以batch為單位進行計算(默認1s產生一個batch),而不是以Tuple為單位,大大減少了ack所需的開銷,顯著提高了吞吐。
但也因為處理數據的粒度變大,導致Spark streaming的數據延時不如Storm,Spark streaming是秒級返回結果(與設置的batch間隔有關),Storm則是毫秒級。
Storm提供了低延遲的計算,但是吞吐較低,並且無法保證exactly once(Storm trident採用batch的方式改善了這兩點),Spark streaming通過小批量的方式保證了吞吐的情況下,同時提供了exactly once語義,但是實時性不如Storm,而且由於採用micro-batch的方式,對window和event time的支持比較有限(Spark streaming 2.0中引入了window和event time,還在起步階段)。
Flink採用分布式快照的方式實現了一個高吞吐、低延遲、支持exactly once的流式系統,流式處理的方式也能更優雅的支持window和event time。
當然也不是說Flink一定就比Storm、Spark streaming好, 沒有最好的框架,只有最合適的框架 。根據自身的業務、公司的技術儲備選擇最合適的框架才是正確的選擇。