您好,登錄后才能下訂單哦!
Hadoop中HDFS的基礎概念是什么,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
一:簡單了解Hadoop:
Hadoop的框架最核心的設計就是:HDFS(Hadoop Distributed File System) 和 MapReduce。
HDFS為海量的數據提供了存儲,則MapReduce為海量的數據提供了計算。
二:HDFS體系結構:
HDFS 是一個主/從(Master/Slave)體系結構,可以通過目錄路徑對文件執行CRUD操。但由于分布式存儲的性質,HDFS集群擁有一個NameNode 和 一些DataNodes。NameNode管理文件系統的元數據,DataNode存儲實際的數據。客戶端通過同NameNode和DataNodes的交互訪問文件系統。客戶端聯系NameNode以獲取文件的源數據,而真正的文件I/O操作是直接和DataNode進行交互的。
NameNode也就是主控制服務器負責管理文件系統的命名空間,記錄文件數據塊咋每個DataNode上的位置和副本信息,協調客戶端對文件的訪問,以及記錄命名空間內的改動或命名空間本身屬性的改動。
DataNode負責他們所在物理節點上的存儲管理。HDFS開放的文件系統的命名空間以便讓用戶以文件的形式存儲數據。HDFS的數據都是“一次寫入,多次讀取”,而其文件通常是按照128MB被企鵝人稱不同的數據塊(Block),每個數據塊盡可能地分散存儲于不同的DataNode中。
NameNode執行文件系統的命名空間操作,比如打開、關閉、重命名文件或目錄等,還決定數據塊到DataNode的映射。DataNode負責處理客戶的讀寫請求,依照NameNode的命令,執行數據的創建,復制等工作。
eg:客戶端要訪問一個文件,首先,客戶端從NameNode中獲得組成該文件的數據塊位置列表,即知道數據塊被存儲在哪些DataNode上,然后,客戶端直接從DataNode上讀取文件數據。此過程中,NameNode不參與文件的傳輸。
一個集群只有一個NameNode,集群中的其他機器各運行一個DataNode,也可以在運行NameNode的機器上同時運行DataNode,或者一臺機器上運行多個DataNode。
NameNode使用事務日志(EditLog)記錄HDFS元數據的變化,是用映像文件FsImage存儲文件系統的命名空間,包含文件的映射及屬性等。事務日志和映像文件都存儲在NameNode的本地文件系統中。NameNode啟動時候,從磁盤中讀取映像文件和事務日志,把事務日志的事務都應用到內存中的映像文件上,然后將新的元數據刷新到本地磁盤的新的映像文件上中,這樣可以截去舊的事務日志。該過程又稱為檢查點(Checkpoint)。
SecondaryNameNode輔助NameNode處理映像文件和事務日志。NameNode啟動的時候合并映像文件和事務日志,而SecondaryNameNode會周期地從NameNode上復制映像文件和事務日志到臨時目錄,合并生成新的映像文件后在重新上傳到NameNode,NameNode更新映像文件并清理事務日志,使得事務日志大小可控。
***********************************************************************************************************
1. NameNode
NameNode 是 HDFS的守護程序,負責記錄文件是如何分割成數據塊的,以及這些數據塊分別被存儲到哪些數據節點上。它的主要功能是對內存及I/O進行集中處理。
由于NameNode是Hadoop集群中的一個單點,一旦NameNode服務器宕機,整個系統無法運行。
NameNode存儲的是元數據。
2. DataNode
集群中的每個從服務器都運行一個DataNode后臺程序,這個后臺程序負責把HDFS數據塊讀寫到本地的文件系統。當需要通過客戶端讀/寫某個數據時,先由NameNode告訴客戶端去哪個DataNode進行具體的讀/寫操作,然后,客戶端直接與這個DataaNode服務器上的后臺程序進行通信,并且通過對相關的數據塊進行讀/寫操作。
DataNode 存儲的是實際數據。
3. SecondaryNameNode
SecondaryNameNode是一個用來監控HDFS狀態的輔助后臺程序。就像NameNode一樣,每個集群都有一個SecondaryNameNode,并且部署在一臺單獨的服務器上,而SecondaryNameNode不同于NameNode,它不接收或記錄任何實時的數據變化,但是,它會與NameNode進行通信,以便定期的保存HDFS元數據的快照。由于NameNode是單點的,通過SecondaryNameNode的快照功能,可以將NameNode的宕機時間和數據損失降低到最小。同時NameNode發生損壞,SecondaryNameNode可以及時地作為備用NameNode使用。
SecondaryNameNode 最重要的任務并不是為NameNode 元數據進行熱備份,而是定期合并f s i m a g e 和e d i t s 日志,并傳輸給NameNode 。這里需要注意的是,為了減小NameNode壓力,NameNode 自己并不會合并fsimage 和edits ,并將文件存儲到磁盤上,而是交由SecondaryNameNode 完成。
4. ResourceManager
ResourceManager主要由以下幾個部分組成:
用戶交互
YARN分別針對普通用戶,管理員和Web提供了三種對外服務,分別對應ClientRMService、AdminService和WebApp:
ClientRMService
ClientRMService是為普通用戶提供的服務,它會處理來自客戶端各種RPC請求,比如提交應用程序、終止應用程序,獲取應用程序運行狀態等。
AdminService
YARN為管理員提供了一套獨立的服務接口,以防止大量的普通用戶請求使管理員發送的管理命令餓死,管理員可通過這些接口管理集群,比如動態更新節點列表,更新ACL列表,更新隊列信息等。
WebApp
為了更加友好地展示集群資源使用情況和應用程序運行狀態等信息,YARN對外提供了一個Web 界面
5. NodeManager(NM管理)
NMLivelinessMonitor
監控NM是否活著,如果一個NodeManager在一定時間(默認為10min)內未匯報心跳信息,則認為它死掉了,會將其從集群中移除。
NodesListManager
維護正常節點和異常節點列表,管理exlude(類似于黑名單)和inlude(類似于白名單)節點列表,這兩個列表均是在配置文件中設置的,可以動態加載。
ResourceTrackerService
處理來自NodeManager的請求,主要包括兩種請求:注冊和心跳,其中,注冊是NodeManager啟動時發生的行為,請求包中包含節點ID,可用的資源上限等信息,而心跳是周期性 行為,包含各個Container運行狀態,運行的Application列表、節點健康狀況(可通過一個腳本設置),而ResourceTrackerService則為NM返回待釋放的Container列表、Application列表等。
6. Application管理
ApplicationACLsManager
管理應用程序訪問權限,包含兩部分權限:查看和修改,查看主要指查看應用程序基本信息,而修改則主要是修改應用程序優先級、殺死應用程序等。
RMAppManager
管理應用程序的啟動和關閉。
ContainerAllocationExpirer
YARN不允許AM獲得Container后長時間不對其使用,因為這會降低整個集群的利用率。當AM收到RM新分配的一個Container后,必須在一定的時間(默認為10min)內在對應的NM上啟動該Container, 否則,RM會回收該Container。
安全管理
ResourceManage自帶了非常全面的權限管理機制,主要由ClientToAMSecretManager、ContainerTokenSecretManager、ApplicationTokenSecretManager等模塊完成。
資源分配
ResourceScheduler
ResourceScheduler是資源調度器,它按照一定的約束條件(比如隊列容量限制等)將集群中的資源分配給各個應用程序。ResourceScheduler是一個插拔式模塊,默認是FIFO實現,YARN還提供了Fair Scheduler和Capacity Scheduler兩個多租戶調度器。
關于Hadoop中HDFS的基礎概念是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。