淺析Hadoop基礎原理

數棧DTinsight發表於2021-03-19

2011年的時候我們在百度搜尋Hadoop相關的問題每天只有零星幾個,2015年再去百度搜尋Hadoop已經有800多萬個問題,而如今已然已經過億了,Hadoop已成為大資料必備的基礎設施了。Hadoop被公認是一套行業大資料標準開源軟體,在分散式環境下提供了海量資料的處理能力。幾乎所有主流廠商都圍繞Hadoop開發工具、開源軟體、商業化工具和技術服務。近年大型IT公司,如EMC、Microsoft、Intel、Teradata、Cisco都明顯增加了Hadoop方面的投入。那麼到底什麼是Hadoop?它有什麼作用?它的基礎架構是怎麼樣的?今天就Hadoop的這些基本概念來做一次簡單的梳理。

一、Hadoop是什麼?

Hadoop是一個由Apache基金會所開發的分散式系統基礎架構, 是一個儲存系統+計算框架的軟體框架。主要解決海量資料儲存與計算的問題,是大資料技術中的基石。Hadoop以一種可靠、高效、可伸縮的方式進行資料處理,使用者可以在不瞭解分散式底層細節的情況下,開發分散式程式,使用者可以輕鬆地在Hadoop上開發和執行處理海量資料的應用程式。

二、Hadoop能解決什麼問題

1、海量資料儲存

HDFS有高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬體上;而且它提供高吞吐量(High throughput)來訪問資料,適合那些有著超大資料集(large data set)的應用程式,它由n臺執行著DataNode的機器組成和1臺(另外一個standby)執行NameNode程式一起構成。每個DataNode 管理一部分資料,然後NameNode負責管理整個HDFS 叢集的資訊(儲存後設資料)。

2、資源管理,排程和分配

Apache Hadoop YARN(Yet Another Resource Negotiator,另一種資源協調者)是一種新的 Hadoop 資源管理器,它是一個通用資源管理系統和排程平臺,可為上層應用提供統 一的資源管理和排程,它的引入為叢集在利用率、資源統一管理和資料共享等方面帶來了巨 大好處。

三、Hadoop元件架構是什麼樣的

看過了Hadoop 的基本介紹之後。我們來了解HDFS 和 YARN的核心架構和原理,先上HDFS框架圖:
看完上面的圖之後,先來思考幾個問題:

1、後設資料資訊是什麼,NameNode是如何維護後設資料的,後設資料資訊如何保障一致性?

    NameNode維護了HDFS 叢集的後設資料資訊,包括檔案的目錄樹,每個檔案對應的資料塊列表,許可權設定,副本數等等。
    後設資料資訊儲存在記憶體裡,那麼NameNode異常當機情況下咋辦?
    NameNode對後設資料的修改包含兩個部分
    記憶體資料修改
    修改記憶體之後寫一條EditLog
    再來看兩個概念 FsImage 和 EditLog:
    FsImage:FsImage是NameNode記憶體中後設資料的映象檔案,是後設資料的一個永久性checkpoint,包含了HDFS的所有目錄和檔案idnode的序列化資訊,可以類比銀行的賬戶餘額,只有簡單的資訊。
    EditLog:EditLog是用於銜接記憶體後設資料和FsImage之間的操作日誌,儲存了自最後一次檢查點之後,所有針對HDFS檔案系統的操作,比如增加檔案、重新命名檔案、刪除目錄等等,可以類比銀行的賬戶流水,包括每一筆的記錄,如果日積月累,流水資訊可以非常大。

    那麼如果Editlog變的非常大之後,當機之後需要讀取Editlog進行恢復後設資料,這是一個非常慢點過程。這個時候該StandbyNameNode 節點上場了。Standby 節點從JournalNode集合拉取Editlog,並定時將Editlog合併成FsImage. FsImage是一份合併之後的存量資料資訊。同時將FsImage 上傳到ActiveNode節點。

2、NameNode Active 和 standby 之間是如何切換並始終保持一個ActiveNode?

    我們可以在上面的HDFS框架圖中看到,連結ZK叢集和NameNode的元件ZKFC
    1、ZKFC 監控NameNode的監控狀態
    2、ZKFC 利用ZK提供的主備節點選舉來切換
    3、通知和修改NameNode的狀態
    4、確認後設資料同步完成之後對外提供服務

再來看YARN框架圖:


上圖描述了YARN的一個任務的提交和資源分配流程,在整個過程中涉及到如下的元件:

    ResourceManeger:負責所有資源的監控、分配和管理,並處理客戶端請求,啟動和監控AppMaster,NodeManager
    NodeManager:單個節點上的資源管理和任務管理,處理ResourceManager,AppMaster 的命令
    AppMaster:負責某個具體應用程式的排程和協調,為應用程式申請資源,並對任務進行監控
    Container:YARN中的一個動態資源分配的概念,其擁有一定的記憶體,核數。

    一個任務提交的整體流程:
    (1)Client向YARN中提交應用程式,
    其中包括ApplicationMaster程式、命令、使用者程式,資源等。
    (2)ResourceManager為該應用程式分配第一個Container,並與對應的NodeManager通訊,要求它在這個Container中啟動應用程式的ApplicationMaster。
    (3)ApplicationMaster首先向ResourceManager註冊,這樣使用者可以直接透過ResourceManager檢視應用程式的執行狀態,然後它將為各個任務申請資源,並監控它的執行狀態
    (4)ApplicationMaster採用輪詢的方式透過RPC協議向ResourceManager申請和領取資源。
    (5)一旦ApplicationMaster申請到資源後,便與對應的NodeManager通訊,要求它啟動任務。
    (6)NodeManager為任務設定好執行環境(包括環境變數、Jar包、二進位制程式等)後,將任務啟動命令寫到一個指令碼中,並透過執行該指令碼啟動任務。
    (7)各個任務透過某個RPC協議向ApplicationMaster彙報自己的狀態和進度,以讓ApplicationMaster隨時掌握各個任務的執行狀態,從而可以在任務失敗時重新啟動任務。在應用程式執行過程中,使用者可隨時透過RPC向ApplicationMaster查詢應用程式的當前執行狀態。
    (8)應用程式執行完成後,ApplicationMaster向ResourceManager登出並關閉自己。

透過上面的內容,可以對Hadoop 的一些基本框架有一些簡單的印象了。之後在使用的時候可以對照上面的結構圖和Hadoop 官網或者社群進行深入理解。

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

相關文章