最全面的Hadoop框架以及整個大資料生態介紹
1. hadoop 生態概況
Hadoop是一個由Apache基金會所開發的分散式系統基礎架構。
使用者可以在不瞭解分散式底層細節的情況下,開發分散式程式。充分利用叢集的威力進行高速運算和儲存。
具有可靠、高效、可伸縮的特點。
Hadoop的核心是YARN,HDFS和Mapreduce
下圖是hadoop生態系統,整合spark生態圈。在未來一段時間內,hadoop將於spark共存,hadoop與spark
都能部署在yarn、mesos的資源管理系統之上
下面將分別對以上各元件進行簡要介紹,具體介紹參見後續系列博文。
2、HDFS(Hadoop分散式檔案系統)
源自於Google的GFS論文,發表於2003年10月,HDFS是GFS克隆版。
HDFS是Hadoop體系中資料儲存管理的基礎。它是一個高度容錯的系統,能檢測和應對硬體故障,用於在低成本的通用硬體上執行。
HDFS簡化了檔案的一致性模型,通過流式資料訪問,提供高吞吐量應用程式資料訪問功能,適合帶有大型資料集的應用程式。
它提供了一次寫入多次讀取的機制,資料以塊的形式,同時分佈在叢集不同物理機器上。
源自於google的MapReduce論文,發表於2004年12月,Hadoop MapReduce是google MapReduce 克隆版。
MapReduce是一種分散式計算模型,用以進行大資料量的計算。它遮蔽了分散式計算框架細節,將計算抽象成map和reduce兩部分,
其中Map對資料集上的獨立元素進行指定的操作,生成鍵-值對形式中間結果。Reduce則對中間結果中相同“鍵”的所有“值”進行規約,以得到最終結果。
MapReduce非常適合在大量計算機組成的分散式並行環境裡進行資料處理。
4. HBASE(分散式列存資料庫)
源自Google的Bigtable論文,發表於2006年11月,HBase是Google Bigtable克隆版
HBase是一個建立在HDFS之上,面向列的針對結構化資料的可伸縮、高可靠、高效能、分散式和麵向列的動態模式資料庫。
HBase採用了BigTable的資料模型:增強的稀疏排序對映表(Key/Value),其中,鍵由行關鍵字、列關鍵字和時間戳構成。
HBase提供了對大規模資料的隨機、實時讀寫訪問,同時,HBase中儲存的資料可以使用MapReduce來處理,它將資料儲存和平行計算完美地結合在一起。
源自Google的Chubby論文,發表於2006年11月,Zookeeper是Chubby克隆版
解決分散式環境下的資料管理問題:統一命名,狀態同步,叢集管理,配置同步等。
Hadoop的許多元件依賴於Zookeeper,它執行在計算機叢集上面,用於管理Hadoop操作。
6. HIVE(資料倉庫)
由facebook開源,最初用於解決海量結構化的日誌資料統計問題。
Hive定義了一種類似SQL的查詢語言(HQL),將SQL轉化為MapReduce任務在Hadoop上執行。通常用於離線分析。
HQL用於執行儲存在Hadoop上的查詢語句,Hive讓不熟悉MapReduce開發人員也能編寫資料查詢語句,然後這些語句被翻譯為Hadoop上面的MapReduce任務。
7.Pig(ad-hoc指令碼)
由yahoo!開源,設計動機是提供一種基於MapReduce的ad-hoc(計算在query時發生)資料分析工具
Pig定義了一種資料流語言—Pig Latin,它是MapReduce程式設計的複雜性的抽象,Pig平臺包括執行環境和用於分析Hadoop資料集的指令碼語言(Pig Latin)。
其編譯器將Pig Latin翻譯成MapReduce程式序列將指令碼轉換為MapReduce任務在Hadoop上執行。通常用於進行離線分析。
8.Sqoop(資料ETL/同步工具)
Sqoop是SQL-to-Hadoop的縮寫,主要用於傳統資料庫和Hadoop之前傳輸資料。資料的匯入和匯出本質上是Mapreduce程式,充分利用了MR的並行化和容錯性。
Sqoop利用資料庫技術描述資料架構,用於在關係資料庫、資料倉庫和Hadoop之間轉移資料。
9.Flume(日誌收集工具)
Cloudera開源的日誌收集系統,具有分散式、高可靠、高容錯、易於定製和擴充套件的特點。
它將資料從產生、傳輸、處理並最終寫入目標的路徑的過程抽象為資料流,在具體的資料流中,資料來源支援在Flume中定製資料傳送方,從而支援收集各種不同協議資料。
同時,Flume資料流提供對日誌資料進行簡單處理的能力,如過濾、格式轉換等。此外,Flume還具有能夠將日誌寫往各種資料目標(可定製)的能力。
總的來說,Flume是一個可擴充套件、適合複雜環境的海量日誌收集系統。當然也可以用於收集其他型別資料
10.Mahout(資料探勘演算法庫)
Mahout起源於2008年,最初是Apache Lucent的子專案,它在極短的時間內取得了長足的發展,現在是Apache的頂級專案。
Mahout的主要目標是建立一些可擴充套件的機器學習領域經典演算法的實現,旨在幫助開發人員更加方便快捷地建立智慧應用程式。
Mahout現在已經包含了聚類、分類、推薦引擎(協同過濾)和頻繁集挖掘等廣泛使用的資料探勘方法。
除了演算法,Mahout還包含資料的輸入/輸出工具、與其他儲存系統(如資料庫、MongoDB 或Cassandra)整合等資料探勘支援架構。
11. Oozie(工作流排程器)
Oozie是一個可擴充套件的工作體系,集成於Hadoop的堆疊,用於協調多個MapReduce作業的執行。它能夠管理一個複雜的系統,基於外部事件來執行,外部事件包括資料的定時和資料的出現。
Oozie工作流是放置在控制依賴DAG(有向無環圖 Direct Acyclic Graph)中的一組動作(例如,Hadoop的Map/Reduce作業、Pig作業等),其中指定了動作執行的順序。
Oozie使用hPDL(一種XML流程定義語言)來描述這個圖。
12. Yarn(分散式資源管理器)
YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基礎上演變而來的,主要是為了解決原始Hadoop擴充套件性較差,不支援多計算框架而提出的。
Yarn是下一代 Hadoop 計算平臺,yarn是一個通用的執行時框架,使用者可以編寫自己的計算框架,在該執行環境中執行。
用於自己編寫的框架作為客戶端的一個lib,在運用提交作業時打包即可。該框架為提供了以下幾個元件:
- 資源管理:包括應用程式管理和機器資源管理
- 資源雙層排程
- 容錯性:各個元件均有考慮容錯性
- 擴充套件性:可擴充套件到上萬個節點
13. Mesos(分散式資源管理器)
Mesos誕生於UC Berkeley的一個研究專案,現已成為Apache專案,當前有一些公司使用Mesos管理叢集資源,比如Twitter。
與yarn類似,Mesos是一個資源統一管理和排程的平臺,同樣支援比如MR、steaming等多種運算框架。
14. Tachyon(分散式記憶體檔案系統)
Tachyon(/'tæki:ˌɒn/ 意為超光速粒子)是以記憶體為中心的分散式檔案系統,擁有高效能和容錯能力,
能夠為叢集框架(如Spark、MapReduce)提供可靠的記憶體級速度的檔案共享服務。
Tachyon誕生於UC Berkeley的AMPLab。
15. Tez(DAG計算模型)
Tez是Apache最新開源的支援DAG作業的計算框架,它直接源於MapReduce框架,核心思想是將Map和Reduce兩個操作進一步拆分,
即Map被拆分成Input、Processor、Sort、Merge和Output, Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等,
這樣,這些分解後的元操作可以任意靈活組合,產生新的操作,這些操作經過一些控制程式組裝後,可形成一個大的DAG作業。
目前hive支援mr、tez計算模型,tez能完美二進位制mr程式,提升運算效能。
16. Spark(記憶體DAG計算模型)
Spark是一個Apache專案,它被標榜為“快如閃電的叢集計算”。它擁有一個繁榮的開源社群,並且是目前最活躍的Apache專案。
最早Spark是UC Berkeley AMP lab所開源的類Hadoop MapReduce的通用的平行計算框架。
Spark提供了一個更快、更通用的資料處理平臺。和Hadoop相比,Spark可以讓你的程式在記憶體中執行時速度提升100倍,或者在磁碟上執行時速度提升10倍
17. Giraph(圖計算模型)
Apache Giraph是一個可伸縮的分散式迭代圖處理系統, 基於Hadoop平臺,靈感來自 BSP (bulk synchronous parallel) 和 Google 的 Pregel。
最早出自雅虎。雅虎在開發Giraph時採用了Google工程師2010年發表的論文《Pregel:大規模圖表處理系統》中的原理。後來,雅虎將Giraph捐贈給Apache軟體基金會。
目前所有人都可以下載Giraph,它已經成為Apache軟體基金會的開源專案,並得到Facebook的支援,獲得多方面的改進。
18. GraphX(圖計算模型)
Spark GraphX最先是伯克利AMPLAB的一個分散式圖計算框架專案,目前整合在spark執行框架中,為其提供BSP大規模並行圖計算能力。
19. MLib(機器學習庫)
Spark MLlib是一個機器學習庫,它提供了各種各樣的演算法,這些演算法用來在叢集上針對分類、迴歸、聚類、協同過濾等。
Spark Streaming支援對流資料的實時處理,以微批的方式對實時資料進行計算
21. Kafka(分散式訊息佇列)
Kafka是Linkedin於2010年12月份開源的訊息系統,它主要用於處理活躍的流式資料。
活躍的流式資料在web網站應用中非常常見,這些資料包括網站的pv、使用者訪問了什麼內容,搜尋了什麼內容等。
這些資料通常以日誌的形式記錄下來,然後每隔一段時間進行一次統計處理。
22. Phoenix(hbase sql介面)
Apache Phoenix 是HBase的SQL驅動,Phoenix 使得Hbase 支援通過JDBC的方式進行訪問,並將你的SQL查詢轉換成Hbase的掃描和相應的動作。
23. ranger(安全管理工具)
Apache ranger是一個hadoop叢集許可權框架,提供操作、監控、管理複雜的資料許可權,它提供一個集中的管理機制,管理基於yarn的hadoop生態圈的所有資料許可權。
24. knox(hadoop安全閘道器)
Apache knox是一個訪問hadoop叢集的restapi閘道器,它為所有rest訪問提供了一個簡單的訪問介面點,能完成3A認證(Authentication,Authorization,Auditing)和SSO(單點登入)等
25. falcon(資料生命週期管理工具)
Apache Falcon 是一個面向Hadoop的、新的資料處理和管理平臺,設計用於資料移動、資料管道協調、生命週期管理和資料發現。它使終端使用者可以快速地將他們的資料及其相關的處理和管理任務“上載(onboard)”到Hadoop叢集。
26.Ambari(安裝部署配置管理工具)
Apache Ambari 的作用來說,就是建立、管理、監視 Hadoop 的叢集,是為了讓 Hadoop 以及相關的大資料軟體更容易使用的一個web工具。