列舉Hadoop生態的各個組件及其功能、以及各個組件之間的相互關系,以圖呈現並加以文字描述。


Hadoop是目前應用最為廣泛的分布式大數據處理框架,其具備可靠、高效、可伸縮等特點

Hadoop的核心組件是HDFS、MapReduce。隨着處理任務不同,各種組件相繼出現,豐富Hadoop生態圈,目前生態圈結構大致如圖所示:

 

 

1、HDFS(分布式文件系統)

HDFS是整個hadoop體系的基礎 。

功能:負責數據的存儲與管理。HDFS有着高容錯性(fault-tolerant)的特點,並且設計用來部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)來訪問應用程序的數據,適合那些有着超大數據集(large data set)的應用程序。

2、MapReduce(分布式計算框架)

MapReduce是一種基於磁盤的分布式並行批處理計算模型。

功能:用於處理大數據量的計算。其中Map對應數據集上的獨立元素進行指定的操作,生成鍵-值對形式中間,Reduce則對中間結果中相同的鍵的所有值進行規約,以得到最終結果。

3、Spark(分布式計算框架)

Spark是一種基於內存的分布式並行計算框架。

同樣是處理大數據計算,不同於MapReduce的是——Job中間輸出結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用於數據挖掘與機器學習等需要迭代的MapReduce的算法。

4、Flink(分布式計算框架)

Flink是一個基於內存的分布式並行處理框架。

功能類似於Spark,但在部分設計思想有較大出入。對 Flink 而言,其所要處理的主要場景就是流數據,批數據只是流數據的一個極限特例而已。

5、Yarn/Mesos(分布式資源管理器)

YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基礎上演變而來的。

功能:主要是為了解決原始Hadoop擴展性較差,不支持多計算框架而提出的

6、Zookeeper(分布式協作服務)

Hadoop的許多組件依賴於Zookeeper,它運行在計算機集群上面。

功能:協調服務/解決分布式環境下的數據管理問題(即用於管理Hadoop操作,如統一命名,狀態同步,集群管理,配置同步等)。

 7、Sqoop(數據同步工具)

Sqoop是SQL-to-Hadoop的縮寫。

功能:主要用於傳統數據庫和Hadoop之前傳輸數據。數據的導入和導出本質上是Mapreduce程序,充分利用了MR的並行化和容錯性。

Sqoop利用數據庫技術描述數據架構,用於在關系數據庫、數據倉庫和Hadoop之間轉移數據。

8、Hive/Impala(基於Hadoop的數據倉庫)

Hive定義了一種類似SQL的查詢語言(HQL),將SQL轉化為MapReduce任務在Hadoop上執行。

功能:通常用於離線分析。

HQL用於運行存儲在Hadoop上的查詢語句,

Hive功能:Hive讓不熟悉MapReduce開發人員也能編寫數據查詢語句,然后這些語句被翻譯為Hadoop上面的MapReduce任務。

Impala功能:用於處理存儲在Hadoop集群中的大量數據的MPP(大規模並行處理)SQL查詢引擎。 它是一個用C ++和Java編寫的開源軟件。 與Apache Hive不同,Impala不基於MapReduce算法。 它實現了一個基於守護進程的分布式架構,它負責在同一台機器上運行的查詢執行的所有方面。因此執行效率高於Apache Hive。

9、HBase(分布式列存儲數據庫)

HBase是一個建立在HDFS之上,面向列的針對結構化數據的可伸縮、高可靠、高性能、分布式和面向列的動態模式數據庫。

HBase采用了BigTable的數據模型:增強的稀疏排序映射表(Key/Value),其中,鍵由行關鍵字、列關鍵字和時間戳構成。

HBase提供了對大規模數據的隨機、實時讀寫訪問,同時,HBase中保存的數據可以使用MapReduce來處理,它將數據存儲和並行計算完美地結合在一起。

10、Flume(日志收集工具)

Flume是一個可擴展、適合復雜環境的海量日志收集系統。

功能:將數據從產生、傳輸、處理並最終寫入目標的路徑的過程抽象為數據流,在具體的數據流中,數據源支持在Flume中定制數據發送方,從而支持收集各種不同協議數據。同時,Flume數據流提供對日志數據進行簡單處理的能力,如過濾、格式轉換等。此外,Flume還具有能夠將日志寫往各種數據目標(可定制)的能力。

Flume以Agent為最小的獨立運行單位,一個Agent就是一個JVM。單個Agent由Source、Sink和Channel三大組件構成

11、Kafka(分布式消息隊列)

Kafka是一種高吞吐量的分布式發布訂閱消息系統。

功能:可以處理消費者規模的網站中的所有動作流數據。實現了主題、分區及其隊列模式以及生產者、消費者架構模式。

生產者組件和消費者組件均可以連接到KafKa集群,而KafKa被認為是組件通信之間所使用的一種消息中間件。KafKa內部氛圍很多Topic(一種高度抽象的數據結構),每個Topic又被分為很多分區(partition),每個分區中的數據按隊列模式進行編號存儲。被編號的日志數據稱為此日志數據塊在隊列中的偏移量(offest),偏移量越大的數據塊越新,即越靠近當前時間。生產環境中的最佳實踐架構是Flume+KafKa+Spark Streaming。

 12、Oozie(工作流調度器)

Oozie是一個可擴展的工作體系,集成於Hadoop的堆棧,用於協調多個MapReduce作業的執行。

功能:能夠管理一個復雜的系統,基於外部事件來執行,外部事件包括數據的定時和數據的出現。

Oozie工作流是放置在控制依賴DAG(有向無環圖 Direct Acyclic Graph)中的一組動作(例如,Hadoop的Map/Reduce作業、Pig作業等),其中指定了動作執行的順序。

Hbase(數據倉庫)

Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮、 實時讀寫的分布式數據庫 

功能:利用Hadoop HDFS作為其文件存儲系統,利用Hadoop MapReduce來處理 HBase中的海量數據,利用Zookeeper作為其分布式協同服務,主要用來存儲非結構化和半結構化的松散數據(列存NoSQL數據庫)

Pig

Pig是一種數據流語言和運行環境,常用於檢索和分析數據量較大的數據集。Pig包括兩部分:一是用於描述數據流的語言,稱為Pig Latin;二是用於運行Pig Latin程序的執行環境。

功能:作為數據分析平台,側重數據查詢和分析,而不是對數據進行修改和刪除等。需要把真正的查詢轉換成相應的MapReduce作業

各組件的關系

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM