1. 程式人生 > >Hadoop大資料應用生態圈中最主要的元件及其關係

Hadoop大資料應用生態圈中最主要的元件及其關係

Hadoop大資料應用生態中最主要的元件及其關係

Hadoop Common

Hadoop Common是在Hadoop0.2版本之後分離出來的HDFS和MapReduce獨立子專案的內容,是Hadoop的核心部分,能為其他模組提供一些常用工具集,如序列化機制、Hadoop抽象檔案系統FileSystem、系統配置工具Configuration,並且在為其平臺上的軟體開發提供KPI等。其他Hadoop子專案都是以此為基礎而建立來的。

HDFS

HDFS(Hadoop分散式檔案系統)源自於Google的GFS論文,發表於2003年10月,HDFS是GFS的實現版。HDFS是Hadoop體系中資料儲存管理的基礎,它是一個高度容錯的系統,能檢測和應對硬體故障,在低成本的通用硬體上執行。HDFS簡化了檔案的一次性模型,通過流式資料訪問,提供高吞吐量應用程式資料訪問功能,適用帶有資料集的應用程式。HDFS提供一次寫入多次讀取

的機制,資料以塊的形式,同時分佈儲存在不同的物理機器上。
HDFS預設的最基本的儲存單位是64MB的資料塊,和普通檔案系統一樣,HDFS中的檔案被分成64MB一塊的資料塊儲存。它的開發是基於流資料模式訪問和處理超大檔案的需求。

超大檔案

超大檔案:是指進行儲存的檔案達到MB、GB、TB級的大檔案。

流式資料訪問

流式資料訪問:一次寫入、多次讀取的訪問模式。

商用硬體

在節點出現故障時,HDFS會繼續執行,使用者不會察覺到明顯的中斷情況。這是由於HDFS的高可用性和容錯性是通過軟體來實現的,也由此使得它不需要價格高的裝置來保障,大街小巷能買到的普通硬體就能用作搭建HDFS。
HDFS並不是所有場景都適用。


1)由於HDFS的優勢是海量資料傳輸,在低延遲的資料訪問中就並不適用,10ms以下的訪問可以無視HDFS。HDFS會用延遲來換取資料的高吞吐量。
2)存在的小檔案較多時,HDFS也不適用。這主要是由於HDFS的整個檔案儲存在NameNode中,它能對資料庫的儲存位置進行定位,因此NameNode的記憶體量是被檔案的數量限制的。而大量的小檔案會佔用很大一部分記憶體,在進行資料處理時會合並這些小檔案。
3)在多處寫和隨機修改的場景中,由於HDFS的檔案不支援多個寫入或任意位置的修改,所以HDFS也不適用。

MapReduce

Mapduce(分散式計算框架)源自於Google的MapReduce論文,發表於2004年12月,Hadoop MapReduce是Google Reduce 克隆版。MapReduce是一種分散式計算模型,用以進行海量資料的計算。它遮蔽了分散式計算框架細節,將計算抽象成Map 和Reduce兩部分,其中Map對資料集上的獨立元素進行指定的操作,生成鍵-值對形式中間結果。Reduce則對中間結果中相同“鍵”的所有“值”進行規約,以得到最終結果。MapReduce非常適合在大量計算機組成的分散式並行環境

裡進行資料處理。

HBase

Hbase(分散式列存資料庫)源自Google的BigTable論文,發表於2006年11月,HBase是Google Table的實現。HBase是一個建立在HDFS之上,面向結構化資料的可伸縮、高可靠、高效能、分散式和麵向列的動態模式資料庫。HBase採用了BigTable的資料模型,即增強的稀疏排序對映表(Key/Value),其中,鍵由行關鍵字、列關鍵字和時間戳構成。HBase提供了對大規模資料的隨機、實時讀寫訪問,同時,HBase中儲存的資料可以使用MapReduce來處理,它將資料儲存和平行計算完美地結合在一起。

Zookeeper

Zookeeper(分散式協作服務)源自Google的Ghubby論文,發表於2006年11月,Zookeeper是CHubby實現版。Zookeeper的主要目標是解決分散式環境下的資料管理問題,如統一命名、狀態同步、叢集管理、配置同步等。Hadoop的許多元件依賴於Zookeeper,它執行在計算機叢集上面,用於Hadoop管理操作。

Hive

Hive(資料倉庫)由Facebook開源,最初用於解決海量結構化的日誌資料統計問題。Hive定義了一種類似SQL的查詢語言(HQL),將HQL轉化為MapReduce任務在Hadoop上執行,通常用於離線分析。HQL用於執行儲存在Hadoop上的查詢語句,Hive使不熟悉MapReduce開發人員也能編寫資料查詢語句,然後這些資料被翻譯成Hadoop上面的MapReduce任務。

Pig

Pig(ad-hoc指令碼)由yahoo開源,其設計動機是提供一種基於MapReduce的ad-hoc(計算query時發生)資料分析工具。Pig定義了一種資料流語言——Pig Latin,它是MapReduce程式設計的複雜性抽象,Pig平臺包括執行環境和用於分析Hadoop資料集的指令碼語言(Pig Lain)。其編譯器將Pig Lain翻譯成MapReduce程式序列,將指令碼轉換為MapReduce任務在Hadoop任務在Hadoop上執行,通常用於進行離線分析

Sqoop

Sqoop(資料ETL/同步工具)是SQL-to-Hadoop的縮寫,主要用於傳統資料和Hadoop之前傳輸資料。資料的匯入和匯出本質上是MapReduce程式,充分利用了MR的並行化和容錯性,Sqoop利用資料庫技術描述資料架構,用於關係資料庫、資料倉庫和Hadoop之間轉移資料

Flume

Flume(日誌收集工具)是Cloudera開源的日誌系統收集系統,具有分散式、高可靠、高容錯、易於定製和擴充套件的特點。它將資料從產生、傳輸、處理並最終寫入目標的路徑的過程抽象為資料流,在具體的資料流中,資料來源支援在Flume中定製資料傳送方,從而支援收集各種不同協議資料。同時,Flume資料流提供對日誌資料進行簡單處理的能力,如過濾、格式轉換等。此外,Flume還具有能夠將日誌寫往各種資料目標(可定製)的能力。總的來說,Flume是一個可擴充套件、適合複雜環境的海量日誌收集系統,當然也可以用於收集其他型別資料

Mahout

Mahout(資料探勘演算法庫)起源於2008年,最初是Apache Lucent的子專案,它在極端的時間內取得了長足的發展,現在是Apache的頂級專案。Mahout的主要目標是建立一些可擴充套件的機器學習領域經典演算法的實現,旨在幫助開發人員更加方便、快捷地建立智慧應用程式。Mahout現在已經包含了聚類、分類、推薦引擎(協同過濾)和頻繁集挖掘等廣大使用的資料探勘演算法。除了演算法,Mahout還包含資料的輸入/輸出工具與其他儲存系統(如資料庫、MangoDB或Cassadra)整合的資料探勘支援架構

YARN

YARN(分散式資源管理器)是下一代MapReduce,即MRv2,是在第一代MapReduce基礎上演變而來的,主要是為了解決原始Hadoop擴充套件性差,不支援多計算框架而提出的。YARN是下一代Hadoop計算平臺,是一個通用的執行時框架,使用者可以編寫自己的極端框架,在該執行環境中執行。

Mesos

Mesos(分散式資源管理器)是一個誕生於UC Berkeley的研究專案,現已成為Apache專案,當前有一些公司使用Masos管理叢集資源,如Twitter。與YARN類似,Mesos是一個資源統一管理和排程平臺重點內容,同樣支援諸如MR、steaming等多種運算框架。

Tachyon

Tachyon(意為超光速粒子)是以記憶體為中心的分散式檔案系統,擁有高效能和容錯能力,能夠為叢集框架(如Spark、Mapre)提供可靠的記憶體級速度的檔案共享服務。Tachyon誕生於UC Berkeley的AMPLab。

Spark

Spark(記憶體DAG計算模型)是一個Apche專案,被標榜為“快如閃電的叢集計算”,它擁有一個繁榮的開源社群,並且是目前最活躍的Apache專案。最早Spark是UC Berkeley AMP Lab所開源的類Hadoop MapReduce的通用計算框架,Spark提供了一個更快、更通用的資料處理平臺。和Hadoop相比,Spark平臺可以讓你的程式在記憶體中執行時速度提升100倍,或者在磁碟上執行時速度提升10倍。

Spark GraphX

Spark GraphX最先是伯克利AMP Lab的一個分散式圖計算框架專案,目前整合在Spark執行框架中,為其提供BSP大規模並行圖計算能力

Spark MLlib

Spark MLlib是一個機器學習庫,它提供了各種各樣的演算法,這些演算法用來在叢集上針對分類、迴歸、聚類、協同過濾等。

Kafka

Kafka是Linkedin於2010年12月開源的訊息系統,主要用於處理活躍的流式資料。活躍的流失資料在Web網站應用中非常常見,這些資料包括網站的PV(Page View),使用者訪問了什麼內容,搜尋了什麼內容等,這些資料通常以日誌的形式儲存下來,然後每隔一段時間進行一次統計處理。

Apache Pheonix

Apache Pheonix是HBase的SQL驅動(HBase SQL介面),Pheonix使得HBase支援通過JDBC的方式進行訪問,並將你的SQL查詢換成HBase的掃描和相應的動作