大資料代表技術:Hadoop、Spark、Flink、Beam
Hadoop:從2005年到2015年,說到大資料都是講hadoop。Hadoop是一整套的技術架構,不是一個單一軟體,它是一個生态系統。

Hadoop有兩大核心:第一個是它解決了分布式存儲的架構叫HDFS,這是一個分布式存儲系統。第二個是解決了分布式計算架構叫MapReduce。這是它的兩大關鍵技術,除此以外,還有其他相關技術,構成了一個完整的生态系統。
HDFS:是海量分布式檔案存儲系統;
YARN提供資源排程和管理服務,它負責為我們的上層的計算架構MapReduce提供資源的排程和管理服務。因為計算架構MapReduce在做計算時需要CPU、記憶體等資源,這是需要YARN幫忙排程。它是在整個叢集去進行排程,而叢集可能有幾千台機器,這幾千台機器資源就由YARN這個架構進行統一排程;
MapReduce是一個計算架構,主要完成計算任務;
Hive:資料倉庫。資料倉庫跟資料庫是不一樣的:資料庫隻能儲存某一時刻的狀态資料,比如一個商品庫存的資料庫,原來有10件,賣出去一件,那個十就會被抹掉,這個庫存就變成九,也就是說它不能記錄其曆史狀态資訊的;但是資料倉庫一般以天為機關或以周為機關,然後每天儲存一次它的鏡像,其可以儲存在每天某個固定時刻的庫存資料,也就是說資料倉庫是一個時間次元上的連續資料,比如說第一天的庫存狀态資訊,第二天的庫存狀态資訊,而我們的資料庫隻能儲存某一個時刻的狀态。
資料倉庫是可以反映時間次元資訊的資料,這樣可以幫我們做一些決策分析,比如資料倉庫裡的OLAP分析(利用資料倉庫裡的資料進行多元資料分析),它可以幫忙分析商品銷量走勢,分析商品銷量變化原因。
傳統資料倉庫都是建構在關系型資料庫上,但是到了大資料時代,傳統資料倉庫已經不能滿足,以為資料量太大,而關系型資料庫根本就不能儲存這麼多資料,是以現在的大資料倉庫都是建構在我們底層的HDFS的基礎上,如Hive資料倉庫都是儲存在分布式檔案系統HDFS基礎上的。是以可以将Hive看着一個程式設計接口,它将SQL語句自動轉換為對HDFS的查詢分析,得到結果。
Pig 也是一個進行資料處理的架構,它提供了一個語言叫Pig Latin,該語言與SQL語言非常相似,它可以幫你把資料進行內建、轉換、加載,也就是說我們在把資料儲存在資料之前必須将資料進行清洗、轉換,這個過程就需要使用Pig,它可以快速完成資料清洗轉換工作,然後将其儲存到資料倉庫當中去進行分析。
Mahout元件是一個資料挖掘庫,它可以實作常用資料挖掘算法,如分類、聚類、回歸等。該元件是針對MapReduce寫的常見的資料算法。但從2015年開始,Spark逐漸取代了MapReduce,MapReduce不再更新,而是全面轉向Spark,也就是說現在的Mahout使用的算法庫都是用Spark寫的,而不是使用MapReduce。
HBase:因為很多資料還是需要資料庫的,是以存在基于Hadoop的分布式資料庫。HBase的底層資料仍是借用分布式檔案存儲系統進行儲存的。
zookeeper:為分布式協作服務
Flune:日志采集分析,是一個分布式的采集系統
Sqoop:完成Hadoop系統元件之間的互通
Spark:它誕生于2009年,而在2015年迅速崛起,下面是Spark的架構圖:
底層是Spark的核心首頁Spark Core,它提供了相關的API,它提供了相關的資料抽象RDD,Spark Core可以完成RDD的各種各樣的操作、開發等,在這基礎上,Spark又提供了多種元件,滿足我們在企業當中的不同的應用需求。
Spark SQL:處理關系型資料庫
Spark Streaming:處理流技術需求,進行流計算
MLlib:封裝了一些常見的機器學習算法庫(采用Spark寫的,提供了整套現成接口)
GraphX:滿足圖計算需求,編寫圖計算應用程式
是以Spark是一種可以滿足多種企業需求的技能架構。
Spark與Hadoop的差別:
Hadoop存在一些缺陷,嚴格說應該是MapReduce存在缺陷,MapReduce因為分為Map和Reduce兩步,非常簡單,但也由于過于簡單,很多方面不能進行表達,也就是說其表達能力有限;其次是因為Hadoop中的MapReduce都是基于磁盤計算,Map和Reduce之間的互動都是通過磁盤來完成的,是以磁盤IO開銷非常大;另外其延遲比較高,Map和Reduce之間存在一個任務銜接,因為Map和Reduce是分階段的,隻有等所有的Map任務完成以後,Reduce任務才能開啟運作,是以存在一個任務等待銜接的開銷。同時多階段疊代執行時,也會嚴重影響其性能。
Spark是繼承了MapReduce的一些核心設計思想,對其進行改進,是以Spark本質上也屬于MapReduce。Spark避免了MapReduce的一些缺陷:為了彌補表達有限,Spark不僅有Map和Reduce函數,還提供了更多比較靈活的資料操作類型,如filter、sort、groupby等,是以Spark程式設計模型更靈活,表達能力也更強大。另外MapRedcue是基于磁盤的計算架構,它是不斷地讀入磁盤、寫磁盤,但Spark卻提供了記憶體計算,可以高效地利用記憶體,包括很多資料交換都是在記憶體中完成的,是以可明顯提供運作記憶體,尤其是進行疊代的時候,MapReduce進行疊代需要反複讀寫磁盤,Spark用記憶體去讀寫資料,不存在反複讀寫磁盤的問題。最後Spark是基于DAG(有向無環圖)的任務排程執行機制,它可以進行相關優化,其可以形成流水線,通過有向無環圖,就可以避免資料反複落地,不用落地就可以把它的輸出直接作為另一個輸入,這樣形成流水線很快可以完成資料的高效處理。
Spark替代的是Hadoop中的MapReduce,因為Spark是一個計算架構,不能進行存儲
Spark可以用Scala、python、Java、R語言進行開發,但是首選是Scala語言,因為Spark這個架構本身是用Scala語言開發的,用Scala開發的應用程式才是最高校的應用程式。
Flink:與Spark功能相似
Flink是有柏林理工大學團隊開發完成的,在2008年已形成雛形。Flink已形成了完備的形成,可以與Hadoop進行互動,它也是一個和Spark一樣的計算架構,用Hadoop進行存儲,然後用Flink進行計算。
Spark與Flink的差別:
Flink以前有一部分是用Java編寫的,後來一部分用Scala編寫的,Spark是用Scala編寫的
在接口方面,Spark提供了Java、Python、R、Scala語言,Flink也提供了相同的接口
計算模型方面,Flink是真正能滿足實時性要求的計算架構,Spark是批處理的計算架構,而基于批處理的計算架構,都不能幫你真正實時響應(毫秒級),而Flink是可以的。Spark之所有能做流計算,是因為它将流切成一段一段,每一個小段做一個批處理,用每一個小段批處理去模拟批處理,而切成小段,最小的機關是秒,實作不了毫秒級。而Flink模型在設計時,是真正面向流資料的,它是以一行一行為計算機關,可以實作毫秒級計算,這個與Storm相似。
Beam:是一整套程式設計接口,它可以通過統一接口将程式運作到不同的平台上去
這個統一接口是基于Dataflow架構,它與其他架構不能完全相容