Storm與Spark、Hadoop這三種框架,各有各的優勢,每一個框架都有本身的最佳應用場景。因此,在不一樣的應用場景下,應該選擇不一樣的框架。算法
1.Storm是最佳的流式計算框架,Storm由Java和Clojure寫成,Storm的優勢是全內存計算,因此它的定位是分佈式實時計算系統,按照Storm做者的說法,Storm對於實時計算的意義相似於Hadoop對於批處理的意義。
Storm的適用場景:
1)流數據處理
Storm能夠用來處理源源不斷流進來的消息,處理以後將結果寫入到某個存儲中去。
2)分佈式RPC。因爲Storm的處理組件是分佈式的,並且處理延遲極低,因此能夠做爲一個通用的分佈式RPC框架來使用。sql
2.Spark是一個基於內存計算的開源集羣計算系統,目的是更快速的進行數據分析。Spark由加州伯克利大學AMP實驗室Matei爲主的小團隊使用Scala開發,相似於Hadoop MapReduce的通用並行計算框架,Spark基於Map Reduce算法實現的分佈式計算,擁有Hadoop MapReduce所具備的優勢,但不一樣於MapReduce的是Job中間輸出和結果能夠保存在內存中,從而再也不須要讀寫HDFS,所以Spark能更好地適用於數據挖掘與機器學習等須要迭代的Map Reduce的算法。
Spark的適用場景:
1)屢次操做特定數據集的應用場合
Spark是基於內存的迭代計算框架,適用於須要屢次操做特定數據集的應用場合。須要反覆操做的次數越多,所需讀取的數據量越大,受益越大,數據量小可是計算密集度較大的場合,受益就相對較小。
2)粗粒度更新狀態的應用
因爲RDD的特性,Spark不適用那種異步細粒度更新狀態的應用,例如Web服務的存儲或者是增量的Web爬蟲和索引。就是對於那種增量修改的應用模型不適合。
總的來講Spark的適用面比較普遍且比較通用。數據庫
3.Hadoop是實現了MapReduce的思想,將數據切片計算來處理大量的離線數據。Hadoop處理的數據必須是已經存放在HDFS上或者相似HBase的數據庫中,因此Hadoop實現的時候是經過移動計算到這些存放數據的機器上來提升效率。
Hadoop的適用場景:
1)海量數據的離線分析處理
2)大規模Web信息搜索
3)數據密集型並行計算編程
簡單來講:
Hadoop適合於離線的批量數據處理適用於對實時性要求極低的場景
Storm適合於實時流數據處理,實時性方面作得極好
Spark是內存分佈式計算框架,試圖吞併Hadoop的Map-Reduce批處理框架和Storm的流處理框架,可是Spark已經作得很不錯了,批處理方面性能優於Map-Reduce,可是流處理目前仍是弱於Storm,產品仍在改進之中服務器
大數據是不能用傳統的計算技術處理的大型數據集的集合。它不是一個單一的技術或工具,而是涉及的業務和技術的許多領域。架構
目前主流的三大分佈式計算系統分別爲Hadoop、Spark和Strom:app
Hadoop當前大數據管理標準之一,運用在當前不少商業應用系統。能夠輕鬆地集成結構化、半結構化甚至非結構化數據集。
Spark採用了內存計算。從多迭代批處理出發,容許將數據載入內存做反覆查詢,此外還融合數據倉庫,流處理和圖形計算等多種計算範式。Spark構建在HDFS上,能與Hadoop很好的結合。它的RDD是一個很大的特色。
Storm用於處理高速、大型數據流的分佈式實時計算系統。爲Hadoop添加了可靠的實時數據處理功能。負載均衡
Hadoop是使用Java編寫,容許分佈在集羣,使用簡單的編程模型的計算機大型數據集處理的Apache的開源框架。 Hadoop框架應用工程提供跨計算機集羣的分佈式存儲和計算的環境。 Hadoop是專爲從單一服務器到上千臺機器擴展,每一個機器均可以提供本地計算和存儲。框架
Hadoop適用於海量數據、離線數據和負責數據,應用場景以下:機器學習
場景1:數據分析,如京東海量日誌分析,京東商品推薦,京東用戶行爲分析
場景2:離線計算,(異構計算+分佈式計算)天文計算
場景3:海量數據存儲,如京東的存儲集羣
基於京麥業務三個實用場景:
都屬於離線數據,決定採用Hadoop做爲京麥數據類產品的數據計算引擎,後續會根據業務的發展,會增長Storm等流式計算的計算引擎,下圖是京麥的北斗系統架構圖:
圖一 京東北斗系統
Hadoop分佈式處理框架核心設計:
HDFS:(Hadoop Distributed File System)分佈式文件系統;
MapReduce:是一種計算模型及軟件架構。
HDFS(Hadoop File System),是Hadoop的分佈式文件存儲系統。
將大文件分解爲多個Block,每一個Block保存多個副本。提供容錯機制,副本丟失或者宕機時自動恢復。默認每一個Block保存3個副本,64M爲1個Block。將Block按照key-value映射到內存當中。
圖二 數據寫入HDFS
圖三 HDFS讀取數據
MapReduce是一個編程模型,封裝了並行計算、容錯、數據分佈、負載均衡等細節問題。MapReduce實現最開始是映射map,將操做映射到集合中的每一個文檔,而後按照產生的鍵進行分組,並將產生的鍵值組成列表放到對應的鍵中。化簡(reduce)則是把列表中的值化簡成一個單值,這個值被返回,而後再次進行鍵分組,直到每一個鍵的列表只有一個值爲止。這樣作的好處是能夠在任務被分解後,能夠經過大量機器進行並行計算,減小整個操做的時間。但若是你要我再通俗點介紹,那麼,說白了,Mapreduce的原理就是一個分治算法。
MapReduce計劃分三個階段執行,即映射階段,shuffle階段,並減小階段。
映射階段:映射或映射器的工做是處理輸入數據。通常輸入數據是在文件或目錄的形式,而且被存儲在Hadoop的文件系統(HDFS)。輸入文件被傳遞到由線映射器功能線路。映射器處理該數據,並建立數據的若干小塊。
減小階段:這個階段是:Shuffle階段和Reduce階段的組合。減速器的工做是處理該來自映射器中的數據。處理以後,它產生一組新的輸出,這將被存儲在HDFS。
圖四 MapReduce
hive是基於Hadoop的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張數據庫表,並提供完整的sql查詢功能,能夠將sql語句轉換爲MapReduce任務進行運行,這套SQL 簡稱HQL。使不熟悉mapreduce 的用戶很方便的利用SQL 語言查詢,彙總,分析數據。而mapreduce開發人員能夠把己寫的mapper 和reducer 做爲插件來支持Hive 作更復雜的數據分析。
圖五 HIVE體系架構圖
由上圖可知,hadoop和mapreduce是hive架構的根基。Hive架構包括以下組件:CLI(command line interface)、JDBC/ODBC、Thrift Server、WEB GUI、metastore和Driver(Complier、Optimizer和Executor)。