大數據Hadoop生態圈介紹

大數據Hadoop生態圈-組件介紹

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

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

   根據服務對象和層次分爲:數據來源層、數據傳輸層、數據存儲層、資源管理層、數據計算層、任務調度層、業務模型層。接下來對Hadoop生態圈中出現的相關組件做一個簡要介紹。

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

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

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

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

DataNode:slave節點,存儲實際數據,並彙報狀態信息給NameNode,默認一個文件會備份3份在不同的DataNode中,實現高可靠性和容錯性。

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

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

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

Jobtracker:master節點,只有一個,管理所有作業,任務/作業的監控,錯誤處理等,將任務分解成一系列任務,並分派給Tasktracker。

Tacktracker:slave節點,運行 Map task和Reduce task;並與Jobtracker交互,彙報任務狀態。

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

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

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

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

Cluster Manager:在standalone模式中即爲Master主節點,控制整個集羣,監控worker。在YARN模式中爲資源管理器

Worker節點:從節點,負責控制計算節點,啓動Executor或者Driver。

Driver: 運行Application 的main()函數

Executor:執行器,是爲某個Application運行在worker node上的一個進程

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

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

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

Spark Streaming:對實時數據流進行處理和控制。Spark Streaming允許程序能夠像普通RDD一樣處理實時數據,通過短時批處理實現的僞流處理。

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

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

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

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

Flink VS Spark

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

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

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

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

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

    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讓不熟悉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三大組件構成

 Source:從客戶端收集數據,並傳遞給Channel。

Channel:緩存區,將Source傳輸的數據暫時存放。

Sink:從Channel收集數據,並寫入到指定地址。

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

 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作業等),其中指定了動作執行的順序。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章