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作業
各組件的關系