1. 程式人生 > >大資料框架Hadoop主要模組介紹

大資料框架Hadoop主要模組介紹

本文涉及到的所有模組,都是屬於Apache組織,不包括其他第三方的模組。

核心模組:

Hadoop Common: 包括Hadoop常用的工具類,由原來的Hadoop core部分更名而來。主要包括系統配置工具Configuration、遠端過程呼叫RPC、序列化機制和Hadoop抽象檔案系統FileSystem等。它們為在通用硬體上搭建雲端計算環境提供基本的服務,併為執行在該平臺上的軟體開發提供了所需的API。

Hadoop Distributed File System (HDFS™): 分散式檔案系統,提供對應用程式資料的高吞吐量,高伸縮性,高容錯性的訪問。是Hadoop體系中資料儲存管理的基礎。它是一個高度容錯的系統,能檢測和應對硬體故障,用於在低成本的通用硬體上執行。HDFS簡化了檔案的一致性模型,通過流式資料訪問,提供高吞吐量應用程式資料訪問功能,適合帶有大型資料集的應用程式。

Hadoop YARN: 任務排程和叢集資源管理。

Hadoop MapReduce: 基於YARN的大型資料集並行處理系統。是一種計算模型,用以進行大資料量的計算。Hadoop的MapReduce實現,和Common、HDFS一起,構成了Hadoop發展初期的三個元件。MapReduce將應用劃分為Map和Reduce兩個步驟,其中Map對資料集上的獨立元素進行指定的操作,生成鍵-值對形式中間結果。Reduce則對中間結果中相同“鍵”的所有“值”進行規約,以得到最終結果。MapReduce這樣的功能劃分,非常適合在大量計算機組成的分散式並行環境裡進行資料處理。

其他模組:

Ambari: 是一種基於Web的工具,支援Apache Hadoop叢集的供應、管理和監控。Ambari目前已支援大多數Hadoop元件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeper、Sqoop和Hcatalog等。Ambari 支援HDFS、MapReduce、Hive、Pig、Hbase、Zookeper、Sqoop和Hcatalog等的集中管理。Ambari還提供了一個用於檢視叢集健康狀況的儀表板,例如散熱圖,以及視覺化檢視MapReduce,Pig和Hive應用程式以及以使用者友好的方式診斷其效能特徵的功能。也是5個頂級hadoop管理工具之一。

Avro: 資料序列化系統,由Doug Cutting牽頭開發,是一個數據序列化系統。類似於其他序列化機制,Avro可以將資料結構或者物件轉換成便於儲存和傳輸的格式,其設計目標是用於支援資料密集型應用,適合大規模資料的儲存與交換。Avro提供了豐富的資料結構型別、快速可壓縮的二進位制資料格式、儲存永續性資料的檔案集、遠端呼叫RPC和簡單動態語言整合等功能。

Cassandra: 可擴充套件的多主資料庫,沒有單點故障。是一套開源分散式NoSQL資料庫系統。它最初由Facebook開發,用於儲存收件箱等簡單格式資料,集GoogleBigTable的資料模型與Amazon Dynamo的完全分散式的架構於一身Facebook於2008將 Cassandra 開源,此後,由於Cassandra良好的可擴充套件性,被Digg、Twitter等知名Web 2.0網站所採納,成為了一種流行的分散式結構化資料儲存方案。

Cassandra是一個混合型的非關係的資料庫,類似於Google的BigTable。其主要功能比Dynamo (分散式的Key-Value儲存系統)更豐富,但支援度卻不如文件儲存MongoDB(介於關係資料庫和非關係資料庫之間的開源產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。支援的資料結構非常鬆散,是類似json的bjson格式,因此可以儲存比較複雜的資料型別)。Cassandra最初由Facebook開發,後轉變成了開源專案。它是一個網路社交雲端計算方面理想的資料庫。以Amazon專有的完全分散式的Dynamo為基礎,結合了Google BigTable基於列族(Column Family)的資料模型。P2P去中心化的儲存。很多方面都可以稱之為Dynamo 2.0。

Chukwa: 用於管理大型分散式系統的資料收集系統(2000+以上的節點, 系統每天產生的監控資料量在T級別)。它構建在Hadoop的HDFS和MapReduce基礎之上,繼承了Hadoop的可伸縮性和魯棒性。Chukwa包含一個強大和靈活的工具集,提供了資料的生成、收集、排序、去重、分析和展示等一系列功能,是Hadoop使用者、叢集運營人員和管理人員的必備工具。

Hbase: 是一個分散式的、面向列的開源資料庫,該技術來源於 Fay Chang 所撰寫的Google論文“Bigtable:一個結構化資料的分散式儲存系統”。就像Bigtable利用了Google檔案系統(File System)所提供的分散式資料儲存一樣,HBase在Hadoop之上提供了類似於Bigtable的能力。HBase是Apache的Hadoop專案的子專案。HBase不同於一般的關係資料庫,它是一個適合於非結構化資料儲存的資料庫。另一個不同的是HBase基於列的而不是基於行的模式。

HBase是一個針對結構化資料的可伸縮、高可靠、高效能、分散式和麵向列的動態模式資料庫。和傳統關係資料庫不同,HBase採用了BigTable的資料模型:增強的稀疏排序對映表(Key/Value),其中,鍵由行關鍵字、列關鍵字和時間戳構成。HBase提供了對大規模資料的隨機、實時讀寫訪問,同時,HBase中儲存的資料可以使用MapReduce來處理,它將資料儲存和平行計算完美地結合在一起。

Hive: 是基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映為一張資料庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為MapReduce任務進行執行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合資料倉庫的統計分析。

Hive是Hadoop中的一個重要子專案,最早由Facebook設計,是建立在Hadoop基礎上的資料倉庫架構,它為資料倉庫的管理提供了許多功能,包括:資料ETL(抽取、轉換和載入)工具、資料儲存管理和大型資料集的查詢和分析能力。Hive提供的是一種結構化資料的機制,定義了類似於傳統關係資料庫中的類SQL語言:Hive QL,通過該查詢語言,資料分析人員可以很方便地執行資料分析業務。

Mahout: Apache旗下的一個開源專案,提供一些可擴充套件的機器學習領域經典演算法的實現,旨在幫助開發人員更加方便快捷地建立智慧應用程式。Mahout包含許多實現,包括聚類、分類、推薦過濾、頻繁子項挖掘。此外,通過使用 Apache Hadoop 庫,Mahout 可以有效地擴充套件到雲中。

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

Pig: 執行在Hadoop上,是對大型資料集進行分析和評估的平臺。它簡化了使用Hadoop進行資料分析的要求,提供了一個高層次的、面向領域的抽象語言:Pig Latin。通過Pig Latin,資料工程師可以將複雜且相互關聯的資料分析任務編碼為Pig操作上的資料流指令碼,通過將該指令碼轉換為MapReduce任務鏈,在Hadoop上執行。和Hive一樣,Pig降低了對大型資料集進行分析和評估的門檻。

Apache Pig 是一個高階過程語言,適合於使用 Hadoop 和 MapReduce 平臺來查詢大型半結構化資料集。通過允許對分散式資料集進行類似 SQL 的查詢,Pig 可以簡化 Hadoop 的使用。
用MapReduce進行資料分析。當業務比較複雜的時候,使用MapReduce將會是一個很複雜的事情,比如你需要對資料進行很多預處理或轉換,以便能夠適應MapReduce的處理模式。另一方面,編寫MapReduce程式,釋出及執行作業都將是一個比較耗時的事情。Pig的出現很好的彌補了這一不足。Pig能夠讓你專心於資料及業務本身,而不是糾結於資料的格式轉換以及MapReduce程式的編寫。本質是上來說,當你使用Pig進行處理時,Pig本身會在後臺生成一系列的MapReduce操作來執行任務,但是這個過程對使用者來說是透明的。

Spark: Hadoop資料快速通用的計算引擎。 Spark提供了一個簡單的程式設計模型,支援各種應用,包括ETL,機器學習,流處理和圖形計算。

Apache Spark 是專為大規模資料處理而設計的快速通用的計算引擎。

Spark是UC Berkeley AMP lab (加州大學伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用並行框架,Spark,擁有Hadoop MapReduce所具有的優點;但不同於MapReduce的是Job中間輸出結果可以儲存在記憶體中,從而不再需要讀寫HDFS,因此Spark能更好地適用於資料探勘與機器學習等需要迭代的MapReduce的演算法。

Spark 是一種與 Hadoop 相似的開源叢集計算環境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負載方面表現得更加優越,換句話說,Spark 啟用了記憶體分佈資料集,除了能夠提供互動式查詢外,它還可以優化迭代工作負載。

Spark 是在 Scala 語言中實現的,它將 Scala 用作其應用程式框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密整合,其中的 Scala 可以像操作本地集合物件一樣輕鬆地操作分散式資料集。

儘管建立 Spark 是為了支援分散式資料集上的迭代作業,但是實際上它是對 Hadoop 的補充,可以在 Hadoop 檔案系統中並行執行。通過名為 Mesos 的第三方叢集框架可以支援此行為。Spark 由加州大學伯克利分校 AMP 實驗室 (Algorithms, Machines, and People Lab) 開發,可用來構建大型的、低延遲的資料分析應用程式。

Tez: 用於構建高效能批處理和互動式資料處理應用程式的可擴充套件框架,由Apache Hadoop中的YARN協調。 Tez通過大幅度提高其速度來改進MapReduce正規化,同時保持MapReduce擴充套件到PB級資料的能力。支援DAG(Database Availability Group 資料庫可用性組)作業的計算框架,它直接源於MapReduce框架,核心思想是將Map和Reduce兩個操作進一步拆分,即Map被拆分成Input、Processor、Sort、Merge和Output, Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等,這樣,這些分解後的元操作可以任意靈活組合,產生新的操作,這些操作經過一些控制程式組裝後,可形成一個大的DAG作業。

ZooKeeper: 一個分散式的,開放原始碼的分散式應用程式協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要元件。它是一個為分散式應用提供一致性服務的軟體,提供的功能包括:配置維護、域名服務、分散式同步、組服務等。

ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的介面和效能高效、功能穩定的系統提供給使用者。

在分散式系統中如何就某個值(決議)達成一致,是一個十分重要的基礎問題。ZooKeeper作為一個分散式的服務框架,解決了分散式計算中的一致性問題。在此基礎上,ZooKeeper可用於處理分散式應用中經常遇到的一些資料管理問題,如統一命名服務、狀態同步服務、叢集管理、分散式應用配置項的管理等。ZooKeeper常作為其他Hadoop相關專案的主要元件,發揮著越來越重要的作用。
Hadoop1.0和Hadoop2.0架構對比圖

Hadoop2.3架構圖


作者:
連結:http://www.imooc.com/article/18560
來源:慕課網
本文原創釋出於慕課網 ,轉載請註明出處,謝謝合作