HDFS Architecture

来源:https://www.cnblogs.com/cjsblog/archive/2017/12/25/8108870.html
-Advertisement-
Play Games

http://hadoop.apache.org/docs/r2.9.0/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html Introduction Hadoop分散式文件系統被設計運行在普通的硬體上。它和目前已經存在的分散式文件系統有很多相似的地方。然 ...


http://hadoop.apache.org/docs/r2.9.0/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

Introduction

Hadoop分散式文件系統被設計運行在普通的硬體上。它和目前已經存在的分散式文件系統有很多相似的地方。然而,也有很多不同。HDFS的容錯性很高,並且被設計用來運行在廉價的硬體上。HDFS提供高吞吐量的訪問應用數據,並且適合用在有很大數據集的應用。HDFS是構建Apache Nutch的基礎設施。HDFS是Apache Hadoop核心工程的一部分。

Assumptions and Goals

Hardware Failure

硬體失敗是一種正常情況而不是異常情況。一個HDFS實例可能由成千上萬台伺服器機器組成,每台機器都存儲著這個文件系統上的一部分數據。事實上有許多組件,每個組件失敗的概率很大,這就意味著HDFS總是不穩定的。因此,快速刪除錯誤的組件,並且自動發現它們是HDFS的一個核心架構目標。

NameNode and DataNodes

HDFS是一個主從結構。一個HDFS集群由一個NameNode和許多個DataNode組成。NameNode是一個主伺服器,它管理文件系統的命名空間,並且客戶端對文件的訪問。DataNode管理與之相關的節點的存儲。HDFS維護一個文件系統的命名空間,並且允許用戶數據以文件形式存儲。在內部,一個文件被切分成一個或多個塊,這些塊被存儲在一系列的DataNode上。NameNode執行文件系統命名空間操作,比如:打開、管理、重命名文件或目錄。它也維護著塊到DataNode之間的映射關係。DataNode負責為這些來自文件系統客戶端的請求提供讀寫服務。在NameNode指定之下,DataNode也執行塊的創建、刪除、複製操作。

HDFS是用Java語言構建的,任何一個支持Java的機器上都可以運行NameNode和DataNode軟體。一種典型的部署方式是用一臺專門的機器上面只部署NameNode,而這個實例集群中的其它的每一個集群上都運行一個DataNode。HDFS這種架構不能阻止在同一臺集群上運行多個DataNode,但這種情況在真實的部署中是很少見的。

The File System Namespace

HDFS的文件系統命名空間和已經存在的其它的文件系統很類似,可以創建、刪除、移動文件或目錄。HDFS支持用戶限額和訪問許可權控制。HDFS不支持硬鏈接和軟鏈接,然而它並沒有阻止這種特性的實現。

NameNode維護文件系統命名空間。任何對文件系統命名空間或者它們的屬性的修改都會記錄到NameNode中。一個應用可以指定一個文件在HDFS中應該維護的副本的數量。一個文件副本的數量叫做這個文件的副本因數,這個信息被存儲在NameNode中。

Data Replication

每個文件被存儲為一系列的塊。為了容錯,文件的每個塊會被覆制。塊的大小和副本因數被配置在每個文件中。在一個文件的所有塊中,除了最後一個塊以外,其餘的塊的大小都相同。應用程式可以指定一個文件的副本數量。在文件被創建的時候副本因數就被指定了,當然在隨後可以修改。在HDFS中的文件都是只能寫一次的,而且在任何時候都是嚴格的只能寫一次。(PS:也就是說寫入了就不能改了,如果想要改則需要先下載本地修改後重新上傳)

NameNode會周期性的接收到來自集群中的每個DataNode的心跳檢測和塊報告。收到心跳檢測意味著這個DataNode還活著可以正常提供服務。一個塊報告包含這個DataNode上的所有的塊列表。

Replica Placement: The First Baby Steps

副本存放的位置對HDFS的可靠性和性能至關重要。最佳的副本位置是HDFS區別與其它分散式文件系統的重要標誌。這個特性需要大量的調試和實驗。機架感知副本位置策略的目的是為了提高數據的可靠性、可用性和網路帶寬的利用率。

一個大的HDFS集群實例由許多電腦組成,這些電腦通常被放在許多機架上。不同機架上的兩台電腦之間通信必須通過交換機。大多數情況下,相同機架上的機器之間的網路帶寬要比不通機架上機器之前的網路帶寬要好很多。

NameNode決定DataNode所屬的機架ID

通常情況下,副本因數是3。HDFS的放置策略是,如果是第一次寫在某個DataNode上,那麼就放置一個副本在這個DataNode所在的本地機器上,否則放置在相同機架上的一個隨機的DataNode上,其它的副本放置在不同的遠程機架上的某個節點,最後一個副本放置在相同的遠程機架上的不同的節點上。機架失敗的概率要比機架上某個節點失敗的概率小很多。這個策略不影響數據的可靠性和可用性。

如果副本因數大於3,那麼第4個以及後面的更多的副本的位置是隨機決定的,但是每個機架上的副本數量有一個上限((replicas - 1) / racks + 2

The Persistence of File System Metadata

NameNode用一個叫做EditLog的事務日誌來持久化文件系統元數據的每一次改變。例如,在HDFS上創建一個新文件會造成NameNode插入一條記錄到EditLog中。同樣的,改變一個文件的副本因數也會造成往EditLog中插入一條記錄。NameNode用它所在的主機的本地操作系統上的一個文件來存儲EditLog。整個文件系統命名空間,包括塊到文件的映射,以及文件的系統屬性,都會被存儲到一個叫做FsImage的文件中。這個FsImage文件也被存儲在NameNode的本地文件系統中。

NameNode在記憶體中保持整個文件系統命名空間以及文件塊的映射。當NameNode啟動的時候,或者當檢查點被觸發的時候,它會從磁碟中讀取FsImage和EditLog,然後根據EditLog構建所有的事務到記憶體中的FsImage,並且刷新新的版本到一個新的FsImage到磁碟。它會截斷舊的EditLog,因為這些EditLog中的事務已經被持久化到FsImage中了。這個處理被叫做檢查點。檢查點的目的在於通過做一個文件系統元數據的快照並且把它們保存到FsImage中來確保HDFS可以很方便的查看文件系統元數據。代替每編輯一次就修改FsImage,我們將這個編輯持久化到EditLog。當檢查點發生的時候,將改變從EditLog寫到FsImage。一個檢查點被觸發在給定的時間間隔(dfs.namenode.checkpoint.period)單位是秒,或者指定文件系統事務累積達到多少數量(dfs.namenode.checkpoint.txns)就觸發。如果這兩個屬性都設置了,那麼第一個達到閾值的將觸發檢查點。

DataNode將文件數據存放在本地文件系統中。DataNode並不知道HDFS的文件,它只是將文件的每個塊存儲到本地文件系統中。DataNode並不是將所有的文件都存在一個目錄下,它會以一種啟髮式的方式來決定每個目錄下該存放的文件的最優數量,並且也會適當的創建子目錄。當DataNode啟動的時候,它通過掃描本地文件系統生成一個和這個本地文件一致的HDFS數據塊的列表,並且發送報告給NameNode。這個報告叫做Blockreport。

 

總結一下:

1、每次元數據的改變都會被記錄到EditLog中

2、文件的元數據已經文件和Block直接的映射關係被記錄到FsImage中

3、改變不會理解寫到FsImage中,而是先記錄到EditLog中,然後當檢查點觸發的時候將EditLog中記錄的改變寫到FsImage中

4、檢查點觸發的時機有兩個:一個是可以通過dfs.namenode.checkpoint.period參數指定多長時間周期性的觸發一次,另一個是通過dfs.namenode.checkpoint.txns指定當EditLog中的記錄達到多少時觸發一次。無論達到那個條件都會觸發,誰先達到,誰先觸發

5、EditLog和FsImage都存放在NameNode所在的機器的本地磁碟上

6、DataNode啟動的時候回發送BlockReport給NameNode

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原創2017-12-25創新教育研究中心TeachPlus C語言面試題 指針篇(一) 指針的使用,一直是c語言面試題中必考的部分, 因為指針本身使用的複雜性與普適性,所以考點非常多,而且也可以與其他知識相互結合, 因此我們將會使用五篇專題的篇幅來介紹指針。分析下麵的程式,指出程式中的錯誤: # i ...
  • 1.磁碟分區——fdisk 當一個新的硬碟需要加到系統中,我們需要做一下幾個步驟 (1) 對硬碟進行分區,以建立可用的partition(分隔槽) (2) 對分隔槽進行format(格式化),以建立可用的filesystem(文件系統) (3) 可以對文件系統進行檢驗 (4) 掛載到相應的目錄上才能 ...
  • Oracle索引詳解(一) 索引介紹   索引對於Oracle學習來說,非常重要,在數據量巨大的狀況下,使用恰到好處的索引,將會使得數據查詢時間大大減少,於2017/12/25暫時對Oracle中的索引進行一個大致的瞭解。 索引的創建語法 索引的特點 索引的不足 比較適合建立索引 ...
  • -- 查詢學生的最高分和最低分,並統計所以學生的最高分和最低分;SELECT sno,MAX(grade),MIN(grade) FROM sc GROUP BY sno WITH ROLLUP; with rollup:該查詢的最後結果出現在最後一行,並且統計了最後一行做了作為總算; (這是在我自 ...
  • 本篇文章是我在MVP直通車分享的關於SQL Server 2017的新功能,現在ppt分享如下,可以點擊這裡下載。 ...
  • 一、 實現功能 有時候在linux伺服器端, 會在mysql命令行中, 創建資料庫, 今天講一下怎麼在創建資料庫時, 把charset設置為utf8,collate設置為utf8_general_ci, 只要使用下麵的命令即可, CREATE DATABASE qinziheng DEFAULT C ...
  • 1. 環境規劃: node1(mysql1) 192.168.10.94 node2(mysql2) 192.168.10.95 vip 192.168.10.222 資料庫 mysql-5.6.26 2.mysql安裝 2.1卸載查看到的包 2.2安裝mysql 2.3初始化資料庫 進行初始化腳本 ...
  • 在Debian下其實可以用apt-get一鍵安裝Redis,但是安裝的版本不是最新的。為了安裝最新的Redis版本,需要從官方下載源碼編譯安裝,過程也比較簡單。 目前Redis最新的stable版本是4.0.6,源碼下載地址是:http://download.redis.io/releases/re ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...