學習大數據不可避免地會用到Hadoop、Hive、Spark等內容,也頗有必要去歸類、整理和比較它們之間的異同與關係。不管是Hadoop仍是Spark或是其餘大數據處理工具,歸根結底仍是要面向大數據的四個核心問題。
1.數據的存儲(big data storage),海量數據須要處理和分析,但前提是要進行有效的存儲。稍後會提到Hadoop(HDFS)分佈式文件系統對超大數據集的容錯性問題。
2.數據的計算(Data calculation),在數據有效存儲的基礎上,對數據的統計和分析本質上就是數據的計算。在大數據領域常見的計算工具備MapReduce、Spark等。
3.數據的查詢(consensus data),對大數據進行有效管理的核心指標是數據查詢技術。其中NoSQL (Not Only SQL)應用較爲普遍,能較有效解決數據的隨機查詢,其中就主要包括Hbase等。從本質而言,依舊是Hadoop模式下的數據查詢。
4.數據的挖掘(Data mining),數據倉庫爲數據的挖掘提供了基礎,經過分類、預測、相關性分析來創建模型進行模式識別、機器學習從而構建專家系統。
以上這四點就是Hadoop、Hive、Spark共同完成的目標。Hadoop從本質上講是一個分佈式文件系統(HDFS),首先能夠用來海量的數據存儲,而其中的MapReduce負責數據的計算,這就使得Hadoop成爲對海量數據進行處理的分佈式框架。Hadoop的誕生突破了傳統數據文件系統的單機模式。HDFS使得數據能夠跨越不一樣的機器與設備,而且用一個路徑去管理不一樣平臺上的數據,這樣一來,不一樣的設備就比如小提琴、大提琴、單簧管、小號、橫笛、鋼琴等樂器合奏出一首交響曲。
演奏交響曲須要有做曲和指揮,在大數據處理上,解決好存儲問題,接下來就是要計算了。在處理不一樣類型的數據時,須要對不一樣的數據資源進行分配,從而就產生了不一樣設備之間數據交換與通訊問題,MapReduce就是面向這些問題的計算引擎。MapReduce是第一代,而Spark是第二代。MapReduce的計算模型分爲Map和Reduce兩個過程。在平常經驗裏,咱們統計數據須要分類,分類越細、參與統計的人數越多,計算的時間就越短,這就是Map的形象比喻,在大數據計算中,成百上千臺機器同時讀取目標文件的各個部分,而後對每一個部分的統計量進行計算,Map就是負責這一工做的;而Reduce就是對分類計數以後的合計,是大數據計算的第二階段。可見,數據的計算過程就是在HDFS基礎上進行分類彙總。
第一代的MapReduce已經獲得了普遍的應用,但其缺點也是明顯的,那就是體量大、操做繁瑣。因而就誕生了Spark這樣以數據計算爲主的大數據處理集羣。從本質上講,依舊是對Map+Reduce模型的改進,使得Map和Reduce的界限劃分再也不那麼清楚,方便數據交換和磁盤讀寫,進一步擴展數據處理量,從本質上講仍是對算法的優化。
這裏須要說明的是Spark和Hadoop是一種平行關係,也是不一樣的大數據生態系統。但核心是一種更加高效的計算引擎,一樣是開源集羣環境,不一樣的是Spark基於Scala語言,對數據的負載能力更強,將來有但願會取代Hadoop,成爲新的大數據處理的生態系統。
下面再說說什麼是Hive。Hive是數據倉庫工具,首先它是創建在HDFS基礎之上的,數據也存儲在HDFS上,能夠說Hive是Hadoop中的一個組件;做爲一個數據倉庫,將HDFS中結構化的數據映射爲數據庫中的表,這樣的話,就省去了程序員爲MapReduce編寫程序的繁瑣過程,提升了工做效率,僅僅經過SQL語句就能夠查詢MapReduce的計算結果,同時還能夠經過SQL對文件系統中的數據進行修改。這樣,不管是用戶仍是開發者就能夠不用再考慮MapReduce中複雜的邏輯關係。當若干行Java代碼被一兩行SQL語句所取代,Hive的價值就體現出來了。
程序員