Spark一種基於內存的通用的實時大數據計算框架(做爲MapReduce的另外一個更優秀的可選的方案)sql
- 通用:Spark Core 用於離線計算,Spark SQL 用於交互式查詢,Spark Streaming 用於實時流式計算,Spark Mlib 用於機器學習,Spark GraphX 用於圖計算
- 實時:Run programs up to 100x faster than Hadoop MapReduce in memory, or 10x faster on disk.
Storm的計算模型(實時)
- Storm是針對每條數據的流式實時計算框架,因爲每條數據過來就直接處理,每條數據都會帶來大量的資源消耗(傳輸,通訊,校驗等)吞吐量不高
- storm能夠動態調整並行度
- Storm保證了更高的實時性,毫秒級延遲

Spark Stream計算模型(準實時)
- 經過設置時間間隔 batch interval 一個時間間隔內的數據做爲一個Batch收集起來給Spark Streaming Application處理(少了不少傳輸,校對開銷),保證了高吞吐量
- 秒級延遲
- 結合Spark生態圈能夠發揮很大的威力

2、Spark Streaming和MapReduce的對比
Shuffle以及MapReduce的計算模型決定了MapReduce只適合對速度要求不敏感的離線批處理任務apache
- Spark的多進程任務可能在同一個物理機器的內存上完成(Spark shuffle也會使用磁盤)
- MapReduce死板的模型必須基於磁盤和大量的網絡傳輸
- MapReduce的程度編寫複雜,Spark更容易上手,支持(Scale JAVA[8支持函數式編程] Python)
- Spark 在缺乏調優時,會出現OOM(Out Of Memory)的問題,致使程序沒法執行,而MapReduce就算是慢也能執行

3、Spark SQL對比Hive
- Spark SQL實際上不能徹底替代Hive,只是替代了Hive中的查詢引擎,針對Hive數據倉庫中的表進行SQL查詢
- 因爲Hive查詢底層基於MapReduce決定了Hive的查詢慢
- Hive中的一部分高級特性在Spark SQL 中未獲得支持
- Spark SQL除了Hive還支持其餘數據源(json parquet jdbc等),同時支持直接針對HDFS執行SQL查詢
