1. 程式人生 > >阿里巴巴飛天大資料架構體系與Hadoop生態系統

阿里巴巴飛天大資料架構體系與Hadoop生態系統

很多人問阿里的飛天大資料平臺、雲梯2、MaxCompute、實時計算到底是什麼,和自建Hadoop平臺有什麼區別。

先說Hadoop

什麼是Hadoop?
Hadoop是一個開源、高可靠、可擴充套件的分散式大資料計算框架系統,主要用來解決海量資料的儲存、分析、分散式資源排程等。Hadoop最大的優點就是能夠提供平行計算,充分利用叢集的威力進行高速運算和儲存。

Hadoop的核心有兩大板塊:HDFS和MapReduce。

HDFS全稱Hadoop Distributed File System,是一種分散式檔案儲存系統。分散式檔案系統是指將固定於某個地點的某個檔案系統,擴充套件到任意多個檔案系統,眾多的節點組成一個檔案系統網路。每個節點可以分佈在不同的地點,通過網路進行節點間的通訊和資料傳輸。人們在使用分散式檔案系統時,無需關心資料是儲存在哪個節點上、或者是從哪個節點獲取的,只需要像使用本地檔案系統一樣管理和儲存檔案系統中的資料。HDFS有著高容錯性,可以部署在低廉的硬體;提供高吞吐量來訪問應用程式的資料;可以有效解決超大資料量儲存和管理難題的分散式檔案系統屬性的特點。因此HDFS天然適合有著超大資料集的應用程式,或者說本身就是為超大規模資料量處理的應用程式而設計的。

MapReduce是一個分散式離線平行計算框架,能夠對大資料集進行並行處理。MapReduce就是將一個超大規模計算量的任務或者說資料量分割成無數小的計算任務與計算檔案,然後再將計算結果進行合併的過程。MapReduce主要分為Map和Reduce兩個階段。Map是計算階段,計算足夠小的計算任務。Reduce是彙總階段,將map階段的計算結果彙總合併起來。

Hadoop的初始版本或者說核心就是這兩大板塊:HDFS為海量資料提供了儲存,而MapReduce為海量資料提供了計算框架。

Hadoop的歷史

1998年9月4日,Google公司在美國矽谷成立。

與此同時,一位名叫Doug Cutting的美國工程師,也迷上了搜尋引擎。他做了一個用於文字搜尋的函式庫,命名為Lucene。Lucene是用JAVA寫成的,因為好用而且開源,非常受程式設計師們的歡迎。

2001年底,Lucene成為Apache軟體基金會jakarta專案的一個子專案。

2004年,Doug Cutting在Lucene的基礎上和Apache開源夥伴Mike Cafarella合作開發了一款開源搜尋引擎,命名為Nutch。Nutch是一個建立在Lucene核心之上的網頁搜尋應用程式,類似於Google。

隨著時間的推移,網際網路發展迅速,資料量暴增,搜尋引擎需要檢索的物件的資料量也在不斷增大。尤其是Google,需要不斷優化自己的搜尋演算法,提升搜尋效率。在這個過程中Google提出了不少的新方法與思路。

2003年,Google發表了一篇技術學術論文,公開了自己的谷歌檔案系統GFS(Google File System)。這是Google公司為了儲存海量搜尋資料而設計的專用檔案系統。

第二年,2004年,Doug Cutting基於Google的GFS論文,實現了分散式檔案儲存系統,並將它命名為NDFS(Nutch Distributed File System)。

2004年,Google又發表了一篇技術學術論文,公開了自己的MapReduce程式設計模型。MapReduce用於大規模資料集的並行分析運算。

第二年,2005年,Doug Cutting又基於MapReduce,在Nutch搜尋引擎實現了大規模資料集的並行分析運算。

2006年,Doug Cutting將NDFS和MapReduce進行了升級改造,並重新命名為Hadoop。NDFS也改名為HDFS(Hadoop Distributed File System)。

此後,大名鼎鼎的大資料框架系統——Hadoop誕生。而Doug Cutting也被人們稱為Hadoop之父。

所以說Hadoop的核心就兩大部分:為大資料提供儲存的HDFS和為大資料計算的MapReduce。

 20190908204146662

HDFS與MapReduce的核心工作原理

HDFS

HDFS主要有兩個角色:NameNode、DataNode和Client。

NameNode是HDFS的守護程式,也是是Master節點,主節點。NameNode中會儲存檔案的元資料資訊,記錄檔案是如何分割成資料塊的,以及這些資料塊被儲存到哪些節點上,可以對記憶體和I/O進行集中管理。NameNode單點在發生故障時將使叢集崩潰。

DataNode是Slave節點,從節點。DataNode負責把HDFS資料塊讀寫到本地檔案系統,是真正儲存檔案的節點。一個檔案會被切割成一個或者多個block塊,這些block塊會被儲存在一系列的DataNode節點中,並且每一個塊可能會在多個DataNode上存在備份。

Client:使用者與HDFS的橋樑。主要用於切分使用者提交的檔案,與NameNode互動,獲得檔案位置資訊。然後直接與DataNode互動,讀取和寫入資料。

HDFS寫入流程(參考的現有文件):

1、使用者向Client(客戶機)提出請求。例如,需要寫入200MB的資料。

2、Client制定計劃:將資料按照64MB為塊,進行切割;所有的塊都儲存三份。

3、Client將大檔案切分成塊(block)。

4、針對第一個塊,Client告訴NameNode(主控節點),請幫助我,將64MB的塊複製三份。

5、NameNode告訴Client三個DataNode(資料節點)的地址,並且將它們根據到Client的距離,進行了排序。

6、Client把資料和清單發給第一個DataNode。

7、第一個DataNode將資料複製給第二個DataNode。

8、第二個DataNode將資料複製給第三個DataNode。

9、如果某一個塊的所有資料都已寫入,就會向NameNode反饋已完成。

10、對第二個Block,也進行相同的操作。

11、所有Block都完成後,關閉檔案。NameNode會將資料持久化到磁碟上。

 

HDFS讀取流程:

1、使用者向Client提出讀取請求。

2、Client向NameNode請求這個檔案的所有資訊。

3、NameNode將給Client這個檔案的塊列表,以及儲存各個塊的資料節點清單(按照和客戶端的距離排序)。

4、Client從距離最近的資料節點下載所需的塊。

 

MapReduce

MapReduce主要也有兩個角色:JobTracker和TaskTracker。

 JobTracker,類似於 NameNode。JobTracker是 Hadoop 叢集中惟一負責控制 MapReduce應用程式的系統,位於Master節點上。在使用者計算作業的應用程式提交之後,JobTracker決定有哪些檔案參與處理,使用檔案塊資訊確定如何建立其他 TaskTracker 從屬任務,同時監控task並且於不同的節點上重啟失敗的task。TaskTracker位於slave從節點上與dataNode結合管理各自節點上由jobtracker分配的task,每個節點只有一個tasktracker,但一個tasktracker可以啟動多個JVM,用於並行執行map或reduce任務。每個 TaskTracker 將狀態和完成資訊報告給 JobTracker。

(實際上MapReduce計算邏輯非常複雜,以上只是簡化描述)

 

HDFS和MapReduce的組合只是Hadoop的1.0版本,這個版本有一些比較大的缺陷:

1、可伸縮性問題:JobTracker負載較重,JobTracker 必須不斷跟蹤數千個 TaskTracker、數百個作業,以及數萬個 map 和 reduce 任務。相反,TaskTracker 通常只執行十來個任務。JobTracker存在單點故障,成為效能瓶頸。

2、可靠性差,NameNode只有一個,萬一掛掉,整個系統就會崩潰。

為了解決一些問題,2012年5月,Hadoop推出了 2.0版本 。

2.0版本中,在HDFS與MapReduce之間,增加了YARN資源管理框架層。

 20190908204201288

YARN全稱Yet Another Resource Negotiator是一個資源管理模組,負責整個叢集資源的管理和排程,例如對每個作業,分配CPU,記憶體等等,都由yarn來管理。它的特點是擴充套件性,容錯性,多框架資源統一排程。區別於hadoop1.0只支援MapReduce作業,yarn之上可以執行不同型別的作業。很多應用都可以執行在yarn之上,由yarn統一進行排程。

YARN的執行原理:

YARN的一個基本思想是講資源管理和作業排程/監視的功能分解為獨立的守護程序。其思想是有一個全域性的ResourceManager (RM) 和每一個應用的ApplicationMaster (AM)。一個應用可以是單個的job,也可以是一組job。

YARN框架由ResourceManager節點和NodeManager組成。ResourceManager具有著應用系統中資源分配的最終權威。NodeManager是每臺機器的一個框架代理,監控每臺機器的資源使用情況(cpu、記憶體、磁碟、網路),同時上報給ResourceManager。每一個應用的ApplicationMaster是一個框架特定的庫,它的任務是向ResourceManager協調資源並與NodeManager一起執行監視任務。

從流程上來說:當用戶提交了一個計算任務,ResourceManager首先會在一個NodeManager為這個任務生成一個ApplicationMaster作為任務的管理者,ApplicationMaster向ResourceManager申請所需要的資源,ResourceManager會告訴NodeManager分配資源,NodeManager分配資源來供任務進行計算。NodeManager在不斷的向ResourceManager彙報資源使用情況。

其實MapReduce與HDFS並不是一定要互相耦合工作的,兩個都可以彼此獨立工作,MapReduce也可以連線本地檔案服務來進行計算,但是他們互相配合的時候才能發揮出最大的能力。

 

大資料架構體系——Hadoop生態系統

目前業界內最流行的大資料架構體系就是Hadoop的生態系統。目前,包括Yahoo、IBM、Facebook、亞馬遜、阿里巴巴、華為、百度、騰訊等公司,都採用Hadoop構建自己的大資料系統,當然,是在Hadoop的基礎上進行二次開發。

Hadoop生態系統是指以大資料分散式儲存(HDFS),分散式計算(MapReduce)和資源排程(YARN)為基礎聯合其他各種元件在內的一整套軟體。Hadoop生態系統的每一個子系統只解決某一個特定的問題域。不是一個全能系統,而是多個小而精的系統。

 20190908204224516

在這之前有個插曲:

2006年,Google又發論文了。這次,Google介紹了自己的BigTable,一種分散式資料儲存系統,用來處理海量資料的非關係型資料庫。

於是Doug Cutting在自己的Hadoop系統裡面又引入了BigTable,並命名為HBase。

簡單介紹Hadoop生態系統的主要構成元件:

HDFS: 基礎的檔案系統,Hadoop分散式檔案系統

MapReduce:平行計算框架,執行在Yarn之上

HBase: 類似Google BigTable的分散式NoSQL列分散式資料庫。適用於實時快速查詢的場景。

Hive:資料倉庫工具。處理的是海量結構化日誌資料的統計問題。可以將結構化的資料檔案對映為一張資料庫表,通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合資料倉庫的統計分析。

Zookeeper:分散式協調服務,“動物園管理員”角色,是一個對叢集服務進行管理的框架,主要是用來解決分散式應用中經常遇到的一些資料管理問題,簡化分散式應用協調及其管理的難度。

Pig: 一個基於Hadoop的大規模資料分析工具,該語言的編譯器會把類SQL的資料分析請求轉換為一系列經過優化處理的MapReduce運算。

Sqoop:在Hadoop與傳統的資料庫間進行資料的傳遞。

Mahout:一個可擴充套件的機器學習和資料探勘庫,實現了很多資料探勘的經典演算法,幫助使用者很方便地建立應用程式。

Oozie/Azkaban:一個工作流排程引擎,用來處理具有依賴關係的作業排程。

Presto/Kylin:一個互動式的查詢引擎,實現低延時查詢。

Flume:日誌收集框架。將多種應用伺服器上的日誌,統一收集到HDFS上,這樣就可以使用hadoop進行處理

對於大資料領域最早的應用者阿里巴巴對大資料的研究是一直走在前列的。感興趣的使用者可以看看一本書:《阿里巴巴大資料之路》書中很詳細的介紹了阿里巴巴的整體大資料架構。

阿里巴巴飛天大資料平臺是在開源Hadoop的基礎上自研的一套體系,這種Serverless大資料服務成為當下主流趨勢,可以減少企業本地伺服器部署壓力,顯著提升企業工作效率的同時減少了企業在開發和人力方面的成本投入,讓企業能更專注於業務發展,培養更多面向業務的技術人員。

6F86F87B_A3A5_406B_90F9_BEEABDBEF4C1_8632_000008C36172100F

7月25日,阿里雲飛天大資料平臺亮相阿里雲峰會上海站,擁有中國唯一自主研發的計算引擎,是全球叢集規模最大的計算平臺,最大可擴充套件至10萬臺計算叢集,支撐海量資料儲存和計算。

MaxCompute__1908_yinlin

阿里巴巴飛天大資料架構體系的主要元件/產品介紹:

MaxCompute(ODPS) :阿里雲大資料計算服務,它能提供快速、完全託管的PB級資料倉庫解決方案,使您可以經濟並高效的分析處理海量資料。https://www.aliyun.com/product/odps

Realtime Compute:實時計算(Alibaba Cloud Realtime Compute,Powered by Ververica)是阿里雲提供的基於 Apache Flink 構建的企業級大資料計算平臺。在 PB 級別的資料集上可以支援亞秒級別的處理延時,賦能使用者標準實時資料處理流程和行業解決方案;支援 Datastream API 作業開發,提供了批流統一的 Flink SQL,簡化 BI 場景下的開發;可與使用者已使用的大資料元件無縫對接,更多增值特性助力企業實時化轉型。https://data.aliyun.com/product/sc

GraphCompute:支援千億規模(關係網路)圖的視覺化建模、自動並行化Gremlin毫秒級查詢和自定義演算法的一站式圖分析平臺;

Elasticsearch:提供100%相容開源Elasticsearch的功能,以及Security、Machine Learning、Graph、APM等商業功能,致力於資料分析、資料搜尋等場景服務。與開源社群背後商業公司Elastic戰略合作,為客戶提供企業級許可權管控、安全監控告警、自動報表生成等場景服務。https://data.aliyun.com/product/elasticsearch

OpenSearch:開放搜尋(OpenSearch)是阿里巴巴自主研發的大規模分散式搜尋引擎平臺,其核心引擎HA3(問天3)系統為包括淘寶、天貓在內的阿里集團核心業務提供搜尋服務支援。通過整合智慧查詢語義理解、機器學習排序演算法等能力,旨在為企業提供高搜尋質量的一站式內容智慧搜尋服務。https://www.aliyun.com/product/opensearch

DataX (CDP):阿里雲資料整合(Data Integration)是阿里集團對外提供的可跨異構資料儲存系統的、可靠、安全、低成本、可彈性擴充套件的資料同步平臺,為400對資料來源提供不同網路環境下的全量/增量資料進出通道。https://www.aliyun.com/product/cdp

Hologres:阿里雲互動式分析(Hologres)是一款相容PostgreSQL協議的實時互動式分析產品。互動式分析與大資料生態無縫打通,支援對PB級資料進行高併發、低延時的分析處理,讓您輕鬆而經濟地使用現有BI工具對資料進行多維分析透視和業務探索。https://www.aliyun.com/product/hologram

機器學習:阿里雲機器學習平臺PAI(Platform of Artificial Intelligence),為傳統機器學習和深度學習提供了從資料處理、模型訓練、服務部署到預測的一站式服務。https://data.aliyun.com/product/learn

智慧推薦:(Artificial Intelligence Recommendation,簡稱AIRec)基於阿里巴巴領先的大資料和人工智慧技術,結合在電商、內容、新聞、視訊直播和社交等多個行業領域的積累,為全球企業及開發者提供個性化推薦服務。https://www.aliyun.com/product/airec

Dataworks(D2):DataWorks是一個提供了大資料OS能力、並以all in one box的方式提供專業高效、安全可靠的一站式大資料智慧雲研發平臺。 同時能滿足使用者對資料治理、質量管理需求,賦予使用者對外提供資料服務的能力。https://data.aliyun.com/product/ide

DQC:資料質量是支援多種異構資料來源的質量校驗、通知、管理服務的一站式平臺。資料質量依託DataWorks平臺,為您提供全鏈路的資料質量方案,包括資料探查、資料對比、資料質量監控、SQL掃描和智慧報警等功能。資料質量監控可以全程監控資料加工流水線,根據質量規則及時發現問題,並通過報警通知負責人及時處理。https://help.aliyun.com/document_detail/73660.html

Apsara Core :阿里巴巴大資料計算平臺MaxCompute計算層(飛天核心);https://baike.baidu.com/item/%E9%A3%9E%E5%A4%A9/19964003

伏羲:阿里雲飛天大資料系統核心的分散式資源排程系統;https://yq.aliyun.com/articles/66954

女媧:阿里雲飛天大資料系統核心的分散式一致性協同服務系統;https://yq.aliyun.com/articles/65226

盤古:阿里雲飛天大資料系統核心的分散式檔案儲存系統;https://yq.aliyun.com/articles/64374

 

️本文作者:隱林

原文連結

本文為雲棲社群原創內容,未經