1. 程式人生 > >開源工具介紹(大資料關鍵技術)

開源工具介紹(大資料關鍵技術)

        在介紹大資料關鍵技術之前,先給出一張Hadoop大資料應用生態中最主要的元件圖,該圖描述了這些元件的地位,以及它們之間的相互關係。


圖1.Hadoop大資料應用生態元件及其關係

HDFS(Hadoop分散式檔案系統)

    HDFS是Hadoop體系中資料儲存管理的基礎,它是一個高容錯的系統。HDFS簡化了檔案的一致性模型,通過流式資料訪問,提供高吞吐量應用程式訪問功能。HDFS中資料以塊的形式儲存,預設資料塊大小為64MB,同時分佈儲存在叢集的不同物理機器上,副本數量預設為3提供一次寫入多次讀取的機制。

        HDFS主要由三個元件構成,分別是NameNode、SecondaryNameNode和DataNode。

       ① NameNode儲存資料的元資訊,主要包括:檔名目錄名以及它們之間的層級關係;檔案目錄的所有者及其許可權;每個檔案塊的名及其檔案有哪些塊組成。

        Hadoop只有一個NameNode這也導致了Hadoop叢集的單點故障問題,為了解決這個問題,Hadoop提供了兩種機制來解決。(1)將Hadoop元資料寫入到本地檔案系統的同時再實時同步到一個遠端掛載的網路檔案系統(NFS)。(2)執行一個SecondaryNameNode。

        ②SecondaryNameNode它的作用是與NameNode進行互動,定期通過編輯日誌檔案合併名稱空間映象,當NameNode發生故障時,它會通過自己合併的空間映象的副本來恢復,但SecondaryNameNode並不是NameNode的備份


        ③DataNode是HDFS中的Worker節點,它負責儲存資料塊,也負責為系統客戶端提供資料塊的讀寫服務。

MapReduce(分散式計算框架)

        MapReduce是一種分散式計算模型,用以進行海量資料的計算。它遮蔽了分散式計算框架細節,將計算抽象成Map和Reduce兩部分,其中Map對資料集上的獨立元素進行指定的操作,生成鍵-值對形式中間結果。Reduce則對中間結果中相同“鍵”進行規約,以得到最終結果。

HBase(分散式列存資料庫)

HBase是一個建立在HDFS之上,面向結構化資料的可伸縮、高可靠、高效能、分散式和麵向列的動態模式資料庫。HBase採用了BigTable的資料模型-增強的稀疏排序對映表(Key/Value),其中,鍵由行關鍵字、列關鍵字和時間戳構成。HBase提供了對大規模資料的隨機、實時讀寫訪問。


ZooKeeper(分散式協作服務)

  ZooKeeper的主要目標是解決分散式環境下的資料管理問題。如統一命名、狀態同步、叢集管理、配置同步等。Hadoop的許多元件依賴於ZooKeeper,它執行在計算機叢集上面,用於管理Hadoop操作。

Hive(資料倉庫)

        Hive最初用於解決海量結構化的日誌資料統計問題。Hive定義了一種類似於SQL的查詢語言(HQL),將SQL轉化為MapReduce任務在Hadoop上執行,通常用於離線分析。

Pig(ad-hoc指令碼)

        其設計動機是提供一種基於Mapreduce的ad-hoc(計算在query時發生)資料分析工具。定義了一種資料流語言—Pig Latin,將指令碼轉換為MapReduce任務在Hadoop上執行。

通常用於進行離線分析。

Sqoop(資料ETL/同步工具)

        Sqoop主要用於傳統資料庫和Hadoop之間傳輸資料,資料的匯入和匯出本質上是MapReduce程式,充分利用了MR的並行化和容錯性。Sqoop利用資料庫技術描述資料架構,用於在關係資料庫、資料倉庫和Hadoop之間轉移資料。

Flume(日誌收集工具)

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

Mahout(資料探勘演算法庫)

  mahout只是一個機器學習的演算法庫,在這個庫當中實現了相應的機器學習的演算法,如:推薦系統(包括基於使用者和基於物品的推薦),聚類和分類演算法。並且這些演算法有些實現了MapReduce,spark從而可以在hadoop平臺上執行,在實際的開發過程中,只需要將相應的jar包即可。        Mahout現在已經包含了聚類、分類、推薦引擎(協同過濾)和頻繁集挖掘等廣泛使用的資料探勘方法。除了演算法,Mahout還包含資料的輸入/輸出工具、與其他儲存系統(如資料庫、MongoDB 或Cassandra)整合等資料探勘支援架構。 
mahout的各個元件下面都會生成相應的jar包。

Yarn(分散式資源管理器)

 Yarn是第二代MapReduce,即MRv2,是在第一代MapReduce基礎上演變而來的,主要為了解決原始Hadoop擴充套件性差,不支援多計算框架而提出的。該框架是hadoop2.x以後對hadoop1.x之前JobTracker和TaskTracker模型的優化,而產生出來的,將JobTracker的資源分配和作業排程及監督分開。該框架主要有ResourceManager,Applicationmatser,nodemanager。其主要工作過程如下:

  • ResourceManager主要負責所有的應用程式的資源分配,
  • ApplicationMaster主要負責每個作業的任務排程,也就是說每一個作業對應一個ApplicationMaster。
  • Nodemanager是接收Resourcemanager 和ApplicationMaster的命令來實現資源的分配執行體。

        ResourceManager在接收到client的作業提交請求之後,會分配一個Conbiner,這裡需要說明一下的是Resoucemanager分配資源是以Conbiner為單位分配的。第一個被分配的Conbiner會啟動Applicationmaster,它主要負責作業的排程。Applicationmanager啟動之後則會直接跟NodeManager通訊。 
        在YARN中,資源管理由ResourceManager和NodeManager共同完成,其中,ResourceManager中的排程器負責資源的分配,而NodeManager則負責資源的供給和隔離。ResourceManager將某個NodeManager上資源分配給任務(這就是所謂的“資源排程”)後,NodeManager需按照要求為任務提供相應的資源,甚至保證這些資源應具有獨佔性,為任務執行提供基礎的保證,這就是所謂的資源隔離。 
在Yarn平臺上可以執行多個計算框架,如:MR,Tez,Storm,Spark等計算,框架。

Spark(記憶體DAG計算模型)

        隨著Yarn的出現,Mapreduce使用者不再需要擔心任務的並行性和容錯問題,只需要使用一些基本的操作就能並行的讀寫資料。但是,由於MapReduce框架並沒有很好的使用分散式記憶體,每個MapReduce任務需要讀寫磁碟,這使得mapReduce對於某些需要重用中間結果的應用很低效。        為了避免MapReduce框架中多次讀寫磁碟的消耗,更充分的利用記憶體,UC Berkeley AMP Lab提出了一中新的開源框架的類Hadoop MapReduce的記憶體程式設計模型,這就是Spark。

Phoenix(HBase的SQL驅動)

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

Kafka(訊息系統)

        Kafka是開源的訊息系統,主要用於處理活躍的流式資料。

Ambari(管理工具)

        Ambari是安裝部署配置管理工具,其作用就是建立、管理、監視Hadoop的叢集,是為了讓Hadoop以及相關的大資料軟體更容易使用的一個Web工具。