Hadoop生態(tài)圈-組件介紹

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

Hadoop的核心組件是HDFS、MapReduce。隨著處理任務不同,各種組件相繼出現(xiàn),豐富Hadoop生態(tài)圈,目前生態(tài)圈結構大致如圖所示:
image.png

根據(jù)服務對象和層次分為:數(shù)據(jù)來源層、數(shù)據(jù)傳輸層、數(shù)據(jù)存儲層、資源管理層、數(shù)據(jù)計算層、任務調度層、業(yè)務模型層。接下來對Hadoop生態(tài)圈中出現(xiàn)的相關組件做一個簡要介紹。

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

HDFS是整個hadoop體系的基礎,負責數(shù)據(jù)的存儲與管理。HDFS有著高容錯性(fault-tolerant)的特點,并且設計用來部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)來訪問應用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集(large data set)的應用程序。

client:切分文件,訪問HDFS時,首先與NameNode交互,獲取目標文件的位置信息,然后與DataNode交互,讀寫數(shù)據(jù)

NameNode:master節(jié)點,每個HDFS集群只有一個,管理HDFS的名稱空間和數(shù)據(jù)塊映射信息,配置相關副本信息,處理客戶端請求。

DataNode:slave節(jié)點,存儲實際數(shù)據(jù),并匯報狀態(tài)信息給NameNode,默認一個文件會備份3份在不同的DataNode中,實現(xiàn)高可靠性和容錯性。

Secondary NameNode:輔助NameNode,實現(xiàn)高可靠性,定期合并fsimage和fsedits,推送給NameNode;緊急情況下輔助和恢復NameNode,但其并非NameNode的熱備份。

Hadoop 2為HDFS引入了兩個重要的新功能 ——Federation和高可用(HA):

Federation允許集群中出現(xiàn)多個NameNode,之間相互獨立且不需要互相協(xié)調,各自分工,管理自己的區(qū)域。 DataNode 被用作通用的數(shù)據(jù)塊存儲設備。每個 DataNode 要向集群中所有NameNode 注冊,并發(fā)送心跳報告,執(zhí)行所有 namenode的命令。

HDFS中的高可用性消除了Hadoop 1中存在的單點故障,其中,NameNode故障將導致集群中斷。HDFS的高可用性提供故障轉移功能(備用節(jié)點從失敗的主NameNode接管工作的過程)以實現(xiàn)自動化。

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

MapReduce是一種基于磁盤的分布式并行批處理計算模型,用于處理大數(shù)據(jù)量的計算。其中Map對應數(shù)據(jù)集上的獨立元素進行指定的操作,生成鍵-值對形式中間,Reduce則對中間結果中相同的鍵的所有值進行規(guī)約,以得到最終結果。

Jobtracker:master節(jié)點,只有一個,管理所有作業(yè),任務/作業(yè)的監(jiān)控,錯誤處理等,將任務分解成一系列任務,并分派給Tasktracker。

Tacktracker:slave節(jié)點,運行 Map task和Reduce task;并與Jobtracker交互,匯報任務狀態(tài)。

Map task:解析每條數(shù)據(jù)記錄,傳遞給用戶編寫的map()函數(shù)并執(zhí)行,將輸出結果寫入到本地磁盤(如果為map—only作業(yè),則直接寫入HDFS)。

Reduce task:從Map 它深刻地執(zhí)行結果中,遠程讀取輸入數(shù)據(jù),對數(shù)據(jù)進行排序,將數(shù)據(jù)分組傳遞給用戶編寫的Reduce()函數(shù)執(zhí)行。

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

Spark是一種基于內存的分布式并行計算框架,不同于MapReduce的是——Job中間輸出結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數(shù)據(jù)挖掘與機器學習等需要迭代的MapReduce的算法。

Cluster Manager:在standalone模式中即為Master主節(jié)點,控制整個集群,監(jiān)控worker。在YARN模式中為資源管理器

Worker節(jié)點:從節(jié)點,負責控制計算節(jié)點,啟動Executor或者Driver。

Driver: 運行Application 的main()函數(shù)

Executor:執(zhí)行器,是為某個Application運行在worker node上的一個進程

Spark將數(shù)據(jù)抽象為RDD(彈性分布式數(shù)據(jù)集),內部提供了大量的庫,包括Spark Core、Spark SQL、Spark Streaming、MLlib、GraphX。 開發(fā)者可以在同一個應用程序中無縫組合使用這些庫。

Spark Core:包含Spark的基本功能;尤其是定義RDD的API、操作以及這兩者上的動作。其他Spark的庫都是構建在RDD和Spark Core之上的

Spark SQL:提供通過Apache Hive的SQL變體Hive查詢語言(HiveQL)與Spark進行交互的API。每個數(shù)據(jù)庫表被當做一個RDD,Spark SQL查詢被轉換為Spark操作。

Spark Streaming:對實時數(shù)據(jù)流進行處理和控制。Spark Streaming允許程序能夠像普通RDD一樣處理實時數(shù)據(jù),通過短時批處理實現(xiàn)的偽流處理。

MLlib:一個常用機器學習算法庫,算法被實現(xiàn)為對RDD的Spark操作。這個庫包含可擴展的學習算法,比如分類、回歸等需要對大量數(shù)據(jù)集進行迭代的操作。

GraphX:控制圖、并行圖操作和計算的一組算法和工具的集合。GraphX擴展了RDD API,包含控制圖、創(chuàng)建子圖、訪問路徑上所有頂點的操作

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

Flink是一個基于內存的分布式并行處理框架,類似于Spark,但在部分設計思想有較大出入。對 Flink 而言,其所要處理的主要場景就是流數(shù)據(jù),批數(shù)據(jù)只是流數(shù)據(jù)的一個極限特例而已。

Flink VS Spark

Spark中,RDD在運行時是表現(xiàn)為Java Object,而Flink主要表現(xiàn)為logical plan。所以在Flink中使用的類Dataframe api是被作為第一優(yōu)先級來優(yōu)化的。但是相對來說在spark RDD中就沒有了這塊的優(yōu)化了。

Spark中,對于批處理有RDD,對于流式有DStream,不過內部實際還是RDD抽象;在Flink中,對于批處理有DataSet,對于流式我們有DataStreams,但是是同一個公用的引擎之上兩個獨立的抽象,并且Spark是偽流處理,而Flink是真流處理。

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

YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基礎上演變而來的,主要是為了解決原始Hadoop擴展性較差,不支持多計算框架而提出的。

Mesos誕生于UC Berkeley的一個研究項目,現(xiàn)已成為Apache項目,當前有一些公司使用Mesos管理集群資源,比如Twitter。與yarn類似,Mesos是一個資源統(tǒng)一管理和調度的平臺,同樣支持比如MR、steaming等多種運算框架。

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

解決分布式環(huán)境下的數(shù)據(jù)管理問題:統(tǒng)一命名,狀態(tài)同步,集群管理,配置同步等。

Hadoop的許多組件依賴于Zookeeper,它運行在計算機集群上面,用于管理Hadoop操作。

7、Sqoop(數(shù)據(jù)同步工具)

Sqoop是SQL-to-Hadoop的縮寫,主要用于傳統(tǒng)數(shù)據(jù)庫和Hadoop之前傳輸數(shù)據(jù)。數(shù)據(jù)的導入和導出本質上是Mapreduce程序,充分利用了MR的并行化和容錯性。

Sqoop利用數(shù)據(jù)庫技術描述數(shù)據(jù)架構,用于在關系數(shù)據(jù)庫、數(shù)據(jù)倉庫和Hadoop之間轉移數(shù)據(jù)。

8、Hive/Impala(基于Hadoop的數(shù)據(jù)倉庫)

Hive定義了一種類似SQL的查詢語言(HQL),將SQL轉化為MapReduce任務在Hadoop上執(zhí)行。通常用于離線分析。

HQL用于運行存儲在Hadoop上的查詢語句,Hive讓不熟悉MapReduce開發(fā)人員也能編寫數(shù)據(jù)查詢語句,然后這些語句被翻譯為Hadoop上面的MapReduce任務。

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

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

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

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

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

10、Flume(日志收集工具)
Flume是一個可擴展、適合復雜環(huán)境的海量日志收集系統(tǒng)。它將數(shù)據(jù)從產(chǎn)生、傳輸、處理并最終寫入目標的路徑的過程抽象為數(shù)據(jù)流,在具體的數(shù)據(jù)流中,數(shù)據(jù)源支持在Flume中定制數(shù)據(jù)發(fā)送方,從而支持收集各種不同協(xié)議數(shù)據(jù)。

同時,F(xiàn)lume數(shù)據(jù)流提供對日志數(shù)據(jù)進行簡單處理的能力,如過濾、格式轉換等。此外,F(xiàn)lume還具有能夠將日志寫往各種數(shù)據(jù)目標(可定制)的能力。

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

image.png

Source:從客戶端收集數(shù)據(jù),并傳遞給Channel。

Channel:緩存區(qū),將Source傳輸?shù)臄?shù)據(jù)暫時存放。

Sink:從Channel收集數(shù)據(jù),并寫入到指定地址。

Event:日志文件、avro對象等源文件。

11、Kafka(分布式消息隊列)
Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),它可以處理消費者規(guī)模的網(wǎng)站中的所有動作流數(shù)據(jù)。實現(xiàn)了主題、分區(qū)及其隊列模式以及生產(chǎn)者、消費者架構模式。

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

12、Oozie(工作流調度器)
Oozie是一個可擴展的工作體系,集成于Hadoop的堆棧,用于協(xié)調多個MapReduce作業(yè)的執(zhí)行。它能夠管理一個復雜的系統(tǒng),基于外部事件來執(zhí)行,外部事件包括數(shù)據(jù)的定時和數(shù)據(jù)的出現(xiàn)。

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

Oozie使用hPDL(一種XML流程定義語言)來描述這個圖。

原文鏈接:https://blog.csdn.net/qq_25062299/article/details/95592877

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容