Hadoop
Hadoop 生态圈(或者泛生态圈)是一個能夠對大量資料進行分布式處理的軟體架構,是大資料平台的開發工具,但不是一個單一的工具,也不是一種單一的技術,而是一系列技術和工具的合集。使用者在不需要了解分布式底層細節的情況下,能夠開發分布式程式。
Hadoop大資料平台,采用分布式架構,包含多個與大資料處理相關的元件:HDFS、MapReduce、Yarn、Hbase、Hive、Spark、Kafak、Storm、HDF、Ambari等,并根據使用者的實際需求完成功能定制。
Hadoop架構中其中最核心的元件有三個:HDFS、MapReduce和Yarn。HDFS為海量資料提供了存儲,而MapReduce則為海量的資料提供了計算,Yarn為海量資料的處理提供了良好的系統排程。
以下是Hadoop生态中的成員:

HDFS
傳統的檔案系統是單機的,不能橫跨不同的機器。HDFS(Hadoop Distributed FileSystem)的設計本質上是為了大量的資料能橫跨成百上千台機器,但是你看到的是一個檔案系統而不是很多檔案系統。
HDFS是Hadoop體系中資料存儲管理的基礎,它是一個高度容錯的系統,能檢測和應對硬體故障,在低成本的通用硬體上運作。HDFS簡化了檔案的一次性模型,通過流式資料通路,提供高吞吐量應用程式資料通路功能,适用帶有資料集的應用程式。HDFS提供一次寫入多次讀取的機制,資料以塊的形式,同時分布存儲在不同的實體機器上。
比如你說我要擷取/hdfs/tmp/file1 的資料,你引用的是一個檔案路徑,但是實際的資料存放在很多不同的機器上。你作為使用者,不需要知道這些,就好比在單機上你不關心檔案分散在什麼磁道什麼扇區一樣。HDFS 為你管理這些資料。
MapReduce
雖然 HDFS 可以為你整體管理不同機器上的資料,但是這些資料太大了。一台機器讀取成 T上P的資料,也許需要好幾天甚至好幾周。如果要用很多台機器處理,就面臨了如何配置設定工作,如果一台機器挂了如何重新啟動相應的任務,機器之間如何互相通信交換資料以完成複雜的計算等等。
MapReduce是第一代計算引擎。MapReduce是一種分布式計算模型,用以進行海量資料的計算。它屏蔽了分布式計算架構細節,将計算抽象成Map 和Reduce兩部分,其中Map對資料集上的獨立元素進行指定的操作,生成鍵-值對形式中間結果。Reduce則對中間結果中相同“鍵”的所有“值”進行規約,以得到最終結果。MapReduce非常适合在大量計算機組成的分布式并行環境裡進行資料處理。
Spark
Tez和Spark是第二代計算引擎。除了記憶體 Cache 之類的新 feature,本質上來說,是讓 Map/Reduce 模型更通用,讓 Map 和 Reduce 之間的界限更模糊,資料交換更靈活,更少的磁盤讀寫,以便更友善地描述複雜算法,取得更高的吞吐量。
有了 MapReduce之後,程式員發現,MapReduce 的程式寫起來真麻煩。之前的 Map Reduce 類似于彙編語言,那麼現在的 spark 就類似于 python 了,功能和 Map Reduce 類似,但是對于開發人員更加的友好,更友善使用。
大資料處理架構,是Hadoop生态中發展迅速的成員。Spark的核心在于記憶體計算模型直指“同門産品”——MapReduce離線計算模型。MapReduce是單流程的優秀解決方案,在資料處理過程中每一步都要經過Map階段和Reduce階段,對于需要多流程計算和算法的用例來說,并非十分高效。作為一個批處理工具,MapReduce更适合做離線處理,而Spark是在記憶體中處理資料,可以處理實時資料。
MapRedcue先于Spark出現,也曾風騷一時。當初MapReduce選擇磁盤,除了要保證資料存儲安全之外,另一個主要原因是大容量記憶體的價格高昂,如果一開始就選擇基于記憶體的解決方案,可能很難推廣。而Spark的出現趕上了好時候,中大型公司有能力部署多台大記憶體機器,可以直接處理線上資料。
Hive
你希望有個更高層更抽象的語言層來描述算法和資料處理流程。于是就有了 Hive。
Hive 用 SQL 描述 MapReduce。它把腳本和 SQL 語言翻譯成 MapReduce 程式,丢給計算引擎去計算,而你就從繁瑣的 MapReduce 程式中解脫出來,用更簡單更直覺的語言去寫程式了。之前直接利用 spark 需要處理 map 和 reduce 的過程對于使用者來說都是隐形的了,就像使用本地資料庫一樣使用大資料檔案。
例如wordcount 任務來說,通過 hive,我們可以通過幾句 SQL 語句就可以達到類似的目的。類似于:
select word, count(*) from word_table group by word;
SqarkSQL 和 Hive on Spark
自從資料分析人員開始用 Hive 分析資料之後,它們發現,Hive 在 MapReduce 上跑,很慢!
它們的設計理念是,MapReduce 慢,但是如果我用新一代通用計算引擎 Tez 或者 Spark 來跑 SQL,那我就能跑的更快。而且使用者不需要維護兩套系統。
Yarn
有了這麼多亂七八糟的工具,都在同一個叢集上運轉,大家需要互相尊重有序工作。是以另外一個重要元件是,排程系統,現在最流行的是 Yarn。
Yarn它是一個通用資源管理系統,可為上層應用提供統一的資源管理和排程,它的引入為叢集在使用率、資源統一管理和資料共享等方面帶來了巨大好處。
參考:
- https://blog.csdn.net/bandaoyu/article/details/83312811
- https://blog.csdn.net/qq_33431394/article/details/108703551
- https://blog.csdn.net/wyqwilliam/article/details/81913740
- https://coffee.pmcaff.com/article/2451386325500032/pmcaff?utm_source=forum&newwindow=1
- https://developer.aliyun.com/ask/134710
- https://ld246.com/article/1583213406178