大資料基礎架構Hadoop,終於有人講明白了

ITPUB社群發表於2022-12-21

導讀:大資料正在成為經濟社會發展的新的驅動力。隨著雲端計算、移動網際網路等網路新技術的應用和發展,社會資訊化程式進入大資料時代,海量資料的產生與流轉成為常態。而大資料技術也如雨後春筍般正在蓬勃發展中。Hadoop分散式架構無疑是當前應用最廣泛、最具代表性的大資料技術之一。


本文將首先介紹Hadoop技術概述,包括Hadoop框架的概念、架構、核心元件,以及Hadoop的應用場景和生態系統。

大資料基礎架構Hadoop,終於有人講明白了


01
Hadoop技術概述

在大資料時代,針對大資料處理的新技術也在不斷地開發和運用中,並逐漸成為資料處理挖掘行業廣泛使用的主流技術。Hadoop作為處理大資料的分散式儲存和計算框架,已在國內外大、中、小型企業中得到了廣泛應用。學習Hadoop技術是從事大資料行業工作必不可少的一步。
1 Hadoop的發展歷史
Hadoop是由Apache的Lucence專案創始人道格·卡廷建立的,Lucence是一個應用廣泛的文字搜尋系統庫。Hadoop起源於開源的網路搜尋引擎Nutch,Nutch本身也是Lucence專案的一部分。Hadoop的發展歷史如圖1所示。

大資料基礎架構Hadoop,終於有人講明白了

▲圖1 Hadoop的發展歷史
2 Hadoop的特點
Hadoop是一個能夠讓使用者輕鬆搭建和使用的分散式計算平臺,能夠讓使用者輕鬆地在Hadoop上開發和執行處理海量資料的應用程式。Hadoop的主要特點如下。
1)高可靠性Hadoop的資料儲存有多個備份,叢集部署在不同機器上,可以防止一個節點當機造成叢集損壞。當資料處理請求失敗時,Hadoop將自動重新部署計算任務。
2)高擴充套件性。Hadoop是在可用的計算機叢集間分配資料並完成計算任務的。為叢集新增新的節點並不複雜,因此可以很容易地對叢集進行節點的擴充套件。
3)高效性。Hadoop可以在節點之間動態地移動資料,在資料所在節點進行並行處理,並保證各個節點的動態平衡,因此處理速度非常快。
4)高容錯性。Hadoop的分散式檔案系統HDFS在儲存檔案時將在多臺機器或多個節點上儲存檔案的備份副本,當讀取該檔案出錯或某一臺機器當機時,系統會呼叫其他節點上的備份檔案,保證程式順利執行。
5)低成本。Hadoop是開源的,即不需要支付任何費用即可下載並安裝使用,節省了購買軟體的成本。
6)可構建在廉價機器上。Hadoop不要求機器的配置達到極高的標準,大部分普通商用伺服器即可滿足要求,透過提供多個副本和容錯機制提高叢集的可靠性。
7)Hadoop基本框架是基於Java語言編寫的。Hadoop是一個基於Java語言開發的框架,因此執行在Linux系統上是非常理想的。Hadoop上的應用程式也可以使用其他語言編寫,如C++和Python。
3 Hadoop儲存框架—HDFS
HDFS是一種旨在普通硬體上執行的分散式檔案系統,與現有的分散式檔案系統有許多相似之處,但也存在明顯的區別。HDFS具有非常好的容錯能力,旨在部署在低成本硬體上。HDFS支援對應用程式資料進行高吞吐量訪問,並且適用於具有海量資料集的讀寫。HDFS是Hadoop的核心元件之一,用於儲存資料。
HDFS簡介及架構
HDFS是以分散式進行儲存的檔案系統,主要負責叢集資料的儲存與讀取。分散式系統可以劃分成多個子系統或模組,各自執行在不同的機器上,子系統或模組之間透過網路通訊進行協作,以實現最終的整體功能。利用多個節點共同協作完成一項或多項具體業務功能的系統即為分散式系統。
HDFS作為一個分散式檔案系統,其分散式主要體現在如下3個方面。
1)HDFS並不是一個單機檔案系統,而是分佈在多個叢集節點上的檔案系統。節點之間透過網路通訊進行協作,提供多個節點的檔案資訊,使每個使用者均可以看到檔案系統的檔案,使多臺機器上的多使用者可以分享檔案和儲存空間。
2)當儲存檔案時,檔案的資料將分佈在多個節點上。資料儲存不是按一個檔案儲存,而是將一個檔案分成一個或多個資料塊進行儲存。資料塊在儲存時並不是都儲存在一個節點上,而是被分別儲存在各個節點中,並且資料塊會在其他節點儲存副本。
3)資料從多個節點讀取。讀取一個檔案時,從多個節點中找到該檔案的資料塊,分別讀取所有資料塊,直至最後一個資料塊讀取完畢。
HDFS是一個主/從(Master/Slave)體系架構的分散式檔案系統。HDFS支援傳統的層次型檔案組織結構,使得使用者或應用程式可以建立目錄,再將檔案儲存至目錄中。檔案系統名稱空間的層次結構和大多數現有的檔案系統類似,可以透過檔案路徑對檔案執行建立、讀取、更新和刪除操作。HDFS的基本架構如圖2所示。

大資料基礎架構Hadoop,終於有人講明白了

▲圖2 HDFS基本架構圖
HDFS檔案系統主要包含一個NameNode、一個Secondary NameNode和多個DataNode。
(1)NameNode
NameNode用於儲存後設資料以及處理客戶端發出的請求。後設資料不是具體的檔案內容,它包含3類重要資訊。第1類資訊是檔案和目錄自身的屬性資訊,如檔名、目錄名、父目錄資訊、檔案大小、建立時間、修改時間等;第2類資訊是記錄檔案內容儲存的相關資訊,如檔案分塊情況、副本個數、每個副本所在的DataNode資訊等;第3類資訊是用於記錄HDFS中所有DataNode的資訊,用於DataNode管理。
在NameNode中存放元資訊的檔案是fsimage檔案。在系統執行期間,所有對後設資料的操作均儲存在記憶體中,並被持久化到另一個檔案edits中。當NameNode啟動時,fsimage檔案將被載入至記憶體,再對記憶體裡的資料執行edits檔案所記錄的操作,以確保記憶體所保留的資料處於最新的狀態。
(2)Secondary NameNode
Secondary NameNode用於備份NameNode的資料,週期性地將edits檔案合併到fsimage檔案並在本地備份,然後將新的fsimage檔案儲存至NameNode,覆蓋原有的fsimage檔案,刪除edits檔案,並建立一個新的edits檔案繼續儲存檔案當前的修改狀態。
(3)DataNode
DataNode是真正儲存資料的地方。在DataNode中,檔案以資料塊的形式進行儲存。Hadoop 3.x預設128 MB為一個資料塊,如果儲存一個大小為129 MB的檔案,那麼檔案將被分為兩個資料塊進行儲存。當檔案上傳至HDFS端時,HDFS會將檔案按128MB的資料塊大小進行切割,將每個資料塊儲存至不同的或相同的DataNode並備份副本,一般預設備份3個副本。NameNode負責記錄檔案的分塊資訊,以確保在讀取該檔案時可以找到並整合所有資料塊。
HDFS的特點
隨著資料量越來越多,傳統的單機式檔案儲存系統已經不能滿足日益增長的資料儲存需求,分散式檔案儲存系統—HDFS應運而生。作為分散式檔案系統,HDFS能夠解決海量資料的儲存問題,其優點列舉如下。
1)高容錯性。HDFS上傳的資料會自動儲存多個副本,透過增加副本的數量增加HDFS的容錯性。如果某一個副本丟失,那麼HDFS將複製其他節點上的副本。
2)適合大規模資料的處理。HDFS能夠處理GB、TB甚至PB級別的資料,數量級規模可達百萬,數量非常大。
3)流式資料訪問。HDFS以流式資料訪問模式儲存超大檔案,有著“一次寫入,多次讀取”的特點,且檔案一旦寫入,不能修改,只能增加,以保證資料的一致性。
當然HDFS也不是完美的,同樣存在侷限性,如不適合低延遲資料訪問,無法高效儲存大量小檔案、不支援多使用者寫入及任意修改檔案。
4 Hadoop計算引擎—MapReduce
MapReduce是一個分散式運算程式的程式設計框架,是基於Hadoop的資料分析應用的核心框架。MapReduce的核心功能是將使用者編寫的業務邏輯程式碼和自帶的元件整合成一個完整的分散式運算程式,並行執行在Hadoop叢集上。認識MapReduce分散式計算框架,並瞭解MapReduce的執行流程,有利於後續的MapReduce程式設計學習。
MapReduce是Hadoop的核心計算框架,是用於大規模資料集(大於1TB)並行運算的程式設計模型,主要包括Map(對映)Reduce(規約)兩個階段。
1)當啟動一個MapReduce任務時,Map端將會讀取HDFS上的資料,將資料對映成所需要的鍵值對型別並傳至Reduce端。
2)Reduce端接收Map端鍵值對型別的中間資料,並根據不同鍵進行分組,對每一組鍵相同的資料進行處理,得到新的鍵值對並輸出至HDFS。
MapReduce作業執行流程如圖3所示。

大資料基礎架構Hadoop,終於有人講明白了

▲圖3 MapReduce作業執行流程圖
一個完整的MapReduce過程涉及資料的輸入與分片、Map階段資料處理、Shuffle&Sort階段資料整合、Reduce階段資料處理、資料輸出等操作。
1)資料的輸入與分片MapReduce過程中的資料是從HDFS分散式檔案系統中讀取的。檔案上傳至HDFS時,一般按照128 MB分成若干個資料塊,所以在執行MapReduce程式時,每個資料塊均會對應一個Map任務。也可以透過重新設定檔案分片大小調整Map的個數,在執行MapReduce程式時系統會根據所設定的分片大小對檔案重新分片(Split)。
2)Map階段資料處理。一個程式有一個或多個Map任務,具體由預設儲存或分片個數決定。在Map階段,資料將以鍵值對的形式被讀入,鍵的值一般為每行首字元與檔案最初始位置的偏移量,即中間所隔字元個數,值為該行的資料記錄。根據具體的需求對鍵值對進行處理,對映成新的鍵值對並傳輸至Reduce端。
3)Shuffle&Sort階段資料整合。此階段是指從Map端輸出開始,傳輸至Reduce端之前的過程。該過程會對同一個Map中輸出的鍵相同的資料先進行整合,減少傳輸的資料量,並在整合後將資料按照鍵進行排序。
4)Reduce階段資料處理。Reduce任務可以有一個或多個,具體由Map階段設定的資料分割槽確定,一個分割槽資料將被一個Reduce處理。針對每一個Reduce任務,Reduce會接收到不同Map任務傳來的資料,並且每個Map傳來的資料都是有序的。一個Reduce任務中的每一次處理均是針對所有鍵相同的資料,對資料進行規約,形成新的鍵值對。
5)資料輸出。Reduce階段處理完資料後即可將資料檔案輸出至HDFS,輸出的檔案個數和Reduce的個數一致。如果只有一個Reduce,那麼輸出只有一個資料檔案,預設命名為“part-r-00000”。
5 Hadoop資源管理器—YARN
YARN是Hadoop的資源管理器,可以提高資源在叢集的利用率,加快執行速率。早期的Hadoop 1.0版本的任務執行效率低下,Hadoop 2.x版本開始引入了YARN框架。YARN框架為叢集在利用率、資源統一管理和資料共享等方面帶來了巨大好處。
Hadoop YARN提供了一個更加通用的資源管理和分散式應用框架。該框架使得使用者可以根據自己的需求實現定製化的資料處理應用,既可以支援MapReduce計算,也可以很方便地管理如Hive、HBase、Pig、Spark/Shark等元件的應用程式。YARN的架構設計使得各型別的應用程式可以執行在Hadoop上,並透過YARN從系統層面進行統一管理。擁有了YARN框架,各種應用可以互不干擾地執行在同一個Hadoop系統中,以共享整個叢集資源。
YARN框架總體上仍然是主/從結構,在整個資源管理框架中,ResourceManager為Master,NodeManager為Slave,ResourceManager負責對各個NodeManager上的資源進行統一管理和排程。使用者提交一個應用程式時,需要提供一個用於跟蹤和管理這個程式的ApplicationMaster,ApplicationMaster負責向ResourceManager申請資源,並要求NodeManger啟動可以佔用一定資源的任務。由於不同的ApplicationMaster被分佈到不同的節點上,所以它們之間不會相互影響。
YARN的基本組成框架如圖4所示。

大資料基礎架構Hadoop,終於有人講明白了

▲圖4 YARN的基本組成框架
YARN主要由ResourceManager、Node-Manager、ApplicationMaster和Client App-lication這4個部分構成,具體說明如下。
1)ResourceManager(RM)。一個全域性的資源管理器,負責整個系統的資源管理和分配。ResourceManager主要由兩個元件構成,即排程器(Scheduler)和應用程式管理器(Applications Manager,ASM)。
排程器負責將系統中的資源分配給各個正在執行的應用程式,不從事任何與具體應用程式相關的工作,如監控或跟蹤應用的執行狀態等,也不負責重新啟動因應用執行失敗或硬體故障而產生的失敗任務。
應用程式管理器負責處理客戶端提交的Job以及協商第一個Container(包裝資源的物件)以供ApplicationMaster執行,並且在ApplicationMaster失敗時將其重新啟動。其中,Container是YARN中的資源抽象,它封裝了某個節點上的多維度資源,如記憶體、CPU、磁碟、網路等。當ApplicationMaster向RM申請資源時,RM為ApplicationMaster返回的資源就是使用Container表示的。YARN會為每個任務分配一個Container,且該任務只能使用該Container中描述的資源。
2)NodeManager(NM)。每個節點上的資源和工作管理員。一方面,NM會定時地向RM彙報本節點上的資源使用情況和各個Container的執行狀態;另一方面,NM會接收並處理來自ApplicationMaster的Container啟動或停止等各種請求。
3)ApplicationMaster(AM)。在使用者提交每個應用程式時,系統會生成一個ApplicationMaster並儲存到提交的應用程式裡。ApplicationMaster的主要功能如下。

  • 與ResourceManager排程器協商以獲取資源(用Container表示)。
  • 對得到的任務進行進一步分配。
  • 與NodeManager通訊以啟動或停止任務。
  • 監控所有任務執行狀態,在任務執行失敗時重新為任務申請資源並重啟任務。

4)Client Application。Client Application是客戶端提交的應用程式。客戶端會將應用程式提交到RM,然後RM將建立一個Application上下檔案物件,再設定AM必需的資源請求資訊,最後提交至RM。

02
Hadoop應用場景介紹

在大資料背景下,Apache Hadoop作為一種分散式儲存和計算框架,已經被廣泛應用到各行各業,業界對於Hadoop這一開源分散式技術的應用也在不斷地擴充中。瞭解Hadoop的應用場景,從而可以更深刻地瞭解Hadoop在實際生活中的應用。
1)線上旅遊。目前全球範圍內大多數線上旅遊網站都使用了Cloudera公司提供的Hadoop發行版,Expedia作為全球最大的線上旅遊公司也在使用Hadoop。在國內目前比較受歡迎的一些旅遊網站如攜程、去哪兒網等也採用了大資料技術對資料進行儲存和計算。
2)移動資料。中國移動於2010年5月正式推出大雲BigCloud 1.0,叢集節點達到了1024個。華為對Hadoop的HA方案及HBase領域也有深入研究,並已經向業界推出了自己的基於Hadoop的大資料解決方案。
3)電子商務。阿里巴巴的Hadoop叢集擁有150個使用者組、4500個叢集使用者,為淘寶、天貓、一淘、聚划算、CBU、支付寶提供底層的基礎計算和儲存服務。
4)詐騙檢測。一般金融服務或政府機構會使用Hadoop儲存所有的客戶交易資料,包括一些非結構化的資料,以幫助機構發現客戶的異常活動,預防欺詐行為。例如國內支付寶、微信錢包這類龐大的網際網路支付平臺,對詐騙、駭客、病毒的防護都十分重視,均使用大資料技術進行詐騙檢測,以保障線上資金的安全。
5)IT安全。除企業IT基礎機構的管理外,Hadoop還可以用於處理機器生成的資料以便識別出來自惡意軟體或網路中的攻擊。國內奇虎360安全軟體在應用方面也使用Hadoop的HBase元件進行資料儲存,縮短了異常恢復的時間。
6)醫療保健。醫療行業也可以使用Hadoop,如IBM Watson技術平臺使用Hadoop叢集作為語義分析等高階分析技術的基礎。醫療機構可以利用語義分析為患者提供醫護人員,並協助醫生更好地為患者進行診斷。
7)搜尋引擎。我們在使用搜尋引擎的過程中會產生大規模的資料,此時,使用Hadoop進行海量資料探勘可以提高資料處理的效率。國外的雅虎已將Hadoop應用到搜尋引擎中,國內的百度和阿里巴巴也將Hadoop應用到搜尋引擎、推薦、資料分析等多個領域。
8)社交平臺。目前網路社交已經成為人們日常生活的一部分,網路社交平臺每天產生的資料量十分龐大。騰訊和臉書作為國內外的大型社交平臺,在資料庫儲存方面均利用了Hadoop生態系統中的Hive元件進行資料儲存和處理。

03
Hadoop生態系統

Hadoop經過多年的發展,已經形成了一個相當成熟的生態系統。現代生活節奏快速,各行各業無時無刻產生著大量的資料,Hadoop發揮著重要的作用。因為各行各業的需求不同,很多時候需要在Hadoop的基礎上進行一些改進和最佳化,也因此產生了許多圍繞Hadoop衍生的工具,逐漸地演變成一個龐大的Hadoop生態系統,如圖5所示。

大資料基礎架構Hadoop,終於有人講明白了

▲圖5 Hadoop生態系統
Hadoop生態系統中常用的元件列舉如下,不同的元件分別提供特定的服務。
1)Hive。Hive是建立在Hadoop基礎上的資料倉儲基礎框架,提供了一系列工具,可儲存、查詢和分析儲存在Hadoop中的大規模資料。Hive定義了一種類SQL語言為HQL,該語言編寫的查詢語句在Hive的底層將轉換為複雜的MapReduce程式,執行在Hadoop大資料平臺上。
2)ZooKeeper。ZooKeeper主要用於保證叢集各項功能的正常進行,並能夠在功能出現異常時及時通知叢集進行處理,保持資料一致性。ZooKeeper是對整個叢集進行監控,可解決分散式環境下的資料管理問題。
3)HBase。HBase是一個針對非結構化資料的可伸縮、高可靠、高效能、分散式和麵向列的動態模式資料庫。HBase提供了對大規模資料的隨機、實時讀寫訪問。同時,HBase中儲存的資料可以使用MapReduce進行處理。HBase將資料儲存和平行計算很好地結合在一起。
4)Spark。Spark是一種快速、通用、可擴充套件的大資料處理引擎,繼承了MapReduce分散式計算的優點並改進了MapReduce明顯的缺點。Spark的中間輸出結果可以儲存在記憶體中,因此能更好地適用於資料探勘與機器學習中迭代次數較多的演算法。
5)Flume。Flume是Cloudera提供的一個高可用的、高可靠的、分散式的海量日誌採集、聚合和傳輸系統,適用於日誌檔案的採集。
6)Kafka。Kafka是一個分散式的基於釋出/訂閱模式的訊息佇列,主要應用於大資料實時處理領域。Kafka是一個事件流平臺,能夠連線其他資料來源進行持續的資料匯入或匯出,並且可以根據需求持久可靠地儲存資料。

本文摘編Hadoop與大資料探勘》,經出版方授權釋出。(書號:9787111709473)轉載請保留文章來源。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024420/viewspace-2928855/,如需轉載,請註明出處,否則將追究法律責任。

相關文章