[HDFS Manual] CH1 HDFS體繫結構

来源:https://www.cnblogs.com/Amaranthus/archive/2018/03/12/8549950.html
-Advertisement-
Play Games

HDFS體繫結構 1<!--[if gte mso 9]><xml> <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F006300350030003800360033003400350039003 ...


 

 

HDFS體繫結構

1

1.HDFS體繫結構... 2

1.1介紹... 2

1.2假設和目標... 2

1.3 NameNode DataNode. 2

1.4 文件系統命名空間... 3

1.5 數據複製... 3

1.5.1 Replica Placement: The First Baby Seteps. 4

1.5.2 副本選擇... 5

1.5.3 安全模式... 5

1.6 文件系統元數據保存... 5

1.7 The Communication協議... 6

1.8 Robustness. 6

1.8.1 Data Disk Failure, Heartbeats and Re-Replication. 6

1.8.2 Cluster Rebalancing. 6

1.8.3 數據完整性... 6

1.8.4 元數據磁碟錯誤... 6

1.8.5 快照... 6

1.9 數據組織... 7

1.9.1 數據塊... 7

1.9.2 複製流水... 7

1.10 可訪問性... 7

1.10.1 FSShell7

1.10.2 DFSAdmin. 7

1.10.3 瀏覽器介面... 7

1.11 空間回收... 7

1.11.1文件刪除和不刪除... 7

1.11.2 減少複製數量... 9

1.12 Reference. 9

 

1.HDFS體繫結構

1.1介紹

HDFS是分散式文件系統,運行在商用的硬體環境上。和其他的分散式文件系統相似。但是也有不同,HDFS是高度容錯的並且設計用來部署在低成本的硬體上。HDFS提供高吞吐量,比較適合大數據的應用。HDFS釋放POSIX來啟動流方式的訪問文件系統數據。HDFS原來是Apache Nutch網頁搜索引擎的底層服務。HDFSApache Hadoop Core項目的一部分。

1.2假設和目標

1.3 NameNode DataNode

HDFSMaster Slave體繫結構。HDFS集群包含一個NameNodemaster服務管理文件系統命名空間和控制client訪問。另外有一些Datanodes,通常Cluster中一個node有一個datanode。用來管理node的空間。HDFS暴露文件系統命名空間允許用戶數據保存在文件中。在內部,文件會被分為多個塊並且這些塊被保存在一些datanode上。Namenode執行文件系統命名空間操作,比如打開,關閉,重命名文件和目錄。也決定了datanode 的塊映射。Datanodeclient讀寫請求服務。Datanode也執行block的創建,刪除,根據namenode的指令複製。

Namenodedatanode是軟體的一部分。HDFS使用java開發,任何支持java的設備都可以運行namenodedatanode。部署通常有一個專用的機器用來執行namenode。其他的設備運行datanode。當然也可以在一個設備上運行多個datanode,但是一般很少出現。

1.4 文件系統命名空間

HDFS支持傳統的分層的文件組織,一個用戶或者應用程式創建目錄,文件存在這些目錄中。文件系統命名空間分層和其他現有的文件系統類似。可以創建,刪除文件,移動文件,重命名文件。HDFS支持用戶配額和訪問許可權。HDFS不支持硬鏈接或者軟連接。但是HDFS不排除這些功能的實現。

Namenode維護文件系統的命名空間。任何修改文件系統命名空間或者屬性都被記錄在Namenode裡面。一個引用程式可以指定一個文件多個副本維護在HDFS裡面。這些信息也放在namenode裡面。

1.5 數據複製

HDFS設計用來保存大文件到一個大集群上。每個文件都以順序的塊存儲。塊被覆制用來容錯。塊的大小和複製參數可以為每個文件配置。文件中的所有的塊大小都是一樣的,while users can start a new block without filling out the last block to the configured block size after the support for variable length block was added to append and hsync.

應用可以指定文件的副本個數。複製參數可以在文件創建的時候創建,之後可以修改。HDFS的文件是write-once(除了appendtruncate),並且在任何時間都是嚴格的1writer

Namenode決定所有的關於複製的塊。定期會接收一個心跳和一個block report。接受一個心跳錶示datanode還活著,block report表示datanode的所有block

1.5.1 Replica Placement: The First Baby Seteps

副本的安置對HDFS的可靠性和性能來說是很重要的。優化副本的安置是HDFS和其他分散式文件系統的區別。這個特性需要有很多的經驗和調整。目的是機架級別的安置策略,用來提高數據可靠性,可用性和網路帶寬利用。

對於很大的HDFS集群來說,通常會傳播到很多機架。不通機架間的node交互需要路過交換機。在很多情況下同一個機架下的網路帶寬比不通機架下的設備帶寬搞。

Namenode為每個datanode決定rackid,通過Hadoop Rack Awareness來識別。一個最簡單的策略是把副本放到不通的機架下麵。這樣如果整個機架錯誤了允許使用其他的機架下的數據。這個策略均勻的把副本分佈到集群,可以很簡單的讓它在出現錯誤的時候來均衡。但是這個策略增加了寫入的開銷,因為要寫入到多個機架下。

對於最通常的例子,複製參數是3HDFS放置策略是如果writer在本地,那麼放在本地也就是寫入的那個datanode,否則隨機隨機選擇一個datanode,第二個放在一個不通的機架下的datanode上。第三個放在相同的機架的不通datanode下。這個策略減小了機架間的傳輸,提高了寫入性能。機架出現故障的概率遠小於一個node出現錯誤的概率,這個策略不影響可靠性和可用性的保證。但是減少了網路帶寬的使用,因為一個block只在2個機架中,而不是3個機架。但是這個策略不能讓數據均勻的分佈。1/3的副本在一個node中,2/3的副本在一個機架下,其他剩下的均勻的分佈在剩下的機架下。這個策略提高了寫入性能並沒有和可靠性和讀性能衝突。

如果副本參數大於3,那麼第4個副本或者之後的副本是隨機存放的,但是每個機架存放副本的個數有個上限,(replicas - 1) / racks + 2

因為namenode不允許datanode擁有同一個block的多個副本,副本的最大個數,就是datanode 的個數。

Storage Types and Storage Policies支持了之後,namenode除了Rack awareness之外,還考慮了這個策略。Namenode選擇node先基於rack awareness,然後檢查候選node的存儲需求。如果候選node沒有storage typenamenode會查看其它node。如果在第一個pathnode不夠,那麼namenode在第二個path查找storage path

1.5.2 副本選擇

為了最小化帶寬和讀延遲,HDFS會嘗試從最近的一個副本上讀取。如果在同一個機架上面有一個可讀副本,這個副本是被讀取的首選。如果HDFS集群跨了多個數據中心,那麼本地的數據中心會被首選。

1.5.3 安全模式

startup的時候,namenode會進入特別的狀態叫做safemode。在safemode下,數據塊的複製是不會發生的。Namenodedatanode上接受到心跳和blockreportBlockreport包含了datanode擁有的所有block。每個block有個副本的最小值。一個block如果在namenode中被檢查完後,那麼就認為是安全的。如果安全率到達某個值,那麼namenode就退出安全模式。如果發現有一些數據塊的副本不夠,那麼就會創建這些資料庫的副本。

1.6 文件系統元數據保存

HDFS的命名空間保存在namenode上。Namenode使用事務日誌叫editlog來保存記錄的修改。比如創建一個新的文件,namenode就會插入一條記錄到editlog。同樣的修改複製參數也會在editlog上創建一條機濾。Namenode在系統的文件系統上保存editlog。整個文件系統的命名空間,包括block和文件的映射,文件系統的屬性。都被保存在fsimage中。Fsimage也被保存在本地文件系統上。

Namenode在記憶體中,保存了整個文件系統命名空間和文件block map的快照。當namenode啟動,或者出發checkpoint,就會從磁碟中把fsimageeditlog讀出來,應用所有editlog上的事務,到記憶體中的fsimage,然後重新刷新到磁碟中的fsimage。然後可以截斷,因為已經被應用到磁碟fsimage。這個過程叫checkpoint。目的是保證HDFS有一致性的文件系統元數據。儘管讀取fsimage速度很快,但是增量的直接修改fsimage並不快。我們不直接修改fsimage,而是保存在editlog中。在checkpoint的時候然後應用的fsimage上。Checkpoint的周期可以通過參數dfs.namenode.checkpoint.period 指定時間間隔來觸發,也可以使用dfs.namenode.checkpoint.txns指定多少個事務之後觸發。如果都設置了,那麼第一個觸發就會checkpoint

HDFS數據在datanode中以文件的方式被保存在本地文件系統上。Datanode不會在意HDFS文件。HDFS數據每個block一個文件保存在本地文件系統上。Datanode不會把所有的文件都放在一個目錄下麵。而是使用一個啟髮式結構來確定,每個目錄的最優文件個數,並且適當的創建子目錄。當datanode啟動,會掃描本地文件系統,生成一個HDFS的列表,並且發送給namenode。這個reportblockreport

1.7 The Communication協議

所有HDFS交互協議都是基於tcp/ipclient創建一個連接到namenode機器。使用clientprotocolnamenode交互,datanode使用datanode protocolnamenode交互。Namenode並不開啟任何RPC。只是對datanode client的反應。

1.8 Robustness

儘管存在錯誤,HDFS保存數據還是可靠的。一下是一些namenode錯誤,datanode錯誤和網路分區。

1.8.1 Data Disk Failure, Heartbeats and Re-Replication

每個datanode會發送心跳信息到namenode。網路分區會導致子網的datanodenamenode 的連接中斷。Namenode通過心跳信息來發現。Namenode把沒有收到心跳信息的node標記為死亡,並且發送新的IO請求到這個node。任何數據在死亡的datanode不在對HDFS可用。Datanode 的死亡會導致一些block的複製參數少於指定的值。Namenode會不間斷的跟蹤這些需要複製的block,並且在有需要的時候啟動複製。需要重新複製的理由可能很多:datanode變的不可用,副本損壞,datanode所在的硬體損壞,或者複製參數增加。

1.8.2 Cluster Rebalancing

HDFS結構相容數據再平衡框架。如果一個datanode的空閑超過了閥值,一個框架可能把數據從一個datanode移動到另外一個。如果一個特定的文件請求特別高,框架會動態的創建副本並且再平衡數據。數據再平衡目前沒有實現。

1.8.3 數據完整性

一個block的數據出現損壞是很有可能的。出現損壞,可能是磁碟問題,網路問題或者有bugHDFS客戶端軟體實現了checksum檢查HDFS文件的內容。當一個客戶端創建了HDFS文件。會為每個block計算checksum並且保存在在同一個命名空間下,獨立的隱藏文件下。當client獲取文件內容,需要驗證每個datanodechecksumchecksum文件中的一致。如果不一致,從副本上獲取。

1.8.4 元數據磁碟錯誤

FsiamgeeditlogHDFS結構的核心。如果出現損壞,會導致HDFS實例無法運行。因為這個可以配置fsimageeditlog多個副本。任何更新fsimageeditlog會同步的更新副本。同步的更新fsiamgeeditlog可能會導致性能問題。然而還是可以接受的,因為HDFS是數據敏感而不是元數據敏感的。當namenode重啟會選擇最新的fsimageeditlog使用。

另外一個選項是使用多namenode啟動HA,或者使用NFS共用存儲,分散式的editlog

1.8.5 快照

快照是被支持的。快照的一個用處是修複HDFS

1.9 數據組織

1.9.1 數據塊

HDFS被設計用來支持非常大的文件。應用使用HDFS來處理這些文件。這些應用只寫一次但是要讀很多次。HDFS支持write-once-read-many。通常HDFS block大小是128MB。因此HDFS會被切成128MB的塊。

1.9.2 複製流水

client寫數據到HDFS,並且複製參數是3namenode會獲取datanode的一個列表使用複製選擇演算法。這些列表包含了datanode 的副本blockClient然後寫入第一個datanode。第一個datanode一部分一部分的接受數據,把每個部分寫到本地的存儲庫中並且把這部分傳輸到list中的第二個datanode。第二個datanode,一樣接受數據,然後存儲到本地存儲庫,然後傳輸到第三個datanode。第三個datanode,接受數據保存到本地存儲庫。因此數據是以pipeline的方式從一個到另外一個。

1.10 可訪問性

HDFS可以以不同的方式被訪問。最原始的使用java API。也可以使用http瀏覽器。HDFS可以被mountclient本地文件系統。

1.10.1 FSShell

HDFS允許用戶數據以目錄和文件的方式組織。提供了命令行藉口FSShell可以讓用戶和HDFS交互。語法和bash類似。

Action

Command

Create a directory named /foodir

bin/hadoop dfs -mkdir /foodir

Remove a directory named /foodir

bin/hadoop fs -rm -R /foodir

View the contents of a file named /foodir/myfile.txt

bin/hadoop dfs -cat /foodir/myfile.txt

1.10.2 DFSAdmin

DFSAdmin命令主要用來管理HDFS集群。

Action

Command

Put the cluster in Safemode

bin/hdfs dfsadmin -safemode enter

Generate a list of DataNodes

bin/hdfs dfsadmin -report

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

-Advertisement-
Play Games
更多相關文章
  • 歷史淵源 什麼是進程 進程和程式的區別 進程狀態:new, ready(waiting for cpu), running, waiting(for i/o or event), terminated 操作系統如何管理進程呢? PCB ...
  • 什麼是操作系統 操作系統包括什麼(kernel) 操作系統結構 ...
  • 預設情況下,安裝完操作系統時,ip是採用dhcp來動態分配的。通常我們需要將其固定下來。 不然 每次系統重啟後,ip都會變動,這樣會給日常工作帶來不必要的麻煩的。 下麵就是在rhel 、centos 下,如何固定Ip. 1、使用ifconfig命令,查看有哪些網路介面。 例如上面的ens33, lo ...
  • 磁碟陣列(Redundant Arrays of Independent Disks,RAID),有“獨立磁碟構成的具有冗餘能力的陣列”之意。 磁碟陣列是由很多價格較便宜的磁碟,組合成一個容量巨大的磁碟組,利用個別磁碟提供數據所產生加成效果提升整個磁碟系統效能。利用這項技術,將數據切割成許多區段,分 ...
  • 查詢語句的處理主要包括三個過程:編譯(parse)、執行(execute)和提取數據(fetch)。 ...
  • 一提到關係型資料庫,我禁不住想:有些東西被忽視了。關係型資料庫無處不在,而且種類繁多,從小巧實用的 SQLite 到強大的 Teradata 。但很少有文章講解資料庫是如何工作的。你可以自己谷歌/百度一下『關係型資料庫原理』,看看結果多麼的稀少【譯者註:百度為您找到相關結果約1,850,000個…】 ...
  • MySQL的MyISAM、InnoDB引擎預設均使用B+樹索引(查詢時都顯示為“BTREE”),本文討論兩個問題: 為什麼MySQL等主流資料庫選擇B+樹的索引結構? 如何基於索引結構,理解常見的MySQL索引優化思路? 為什麼索引無法全部裝入記憶體 索引結構的選擇基於這樣一個性質:大數據量時,索引無 ...
  • 前言 這邊文章,筆者要分享的是如何在我們的Linux系統中安裝我們的Mysql資料庫。 一、Mysql安裝 1.1下載資源並上傳到虛擬機上 1.1.1下載資源 官網下載資源:點我跳轉到資料庫下載官網 因為筆者使用的系統是centOS,所以下載的是red hat相關的資料庫系統: 當然了筆者下載的版本 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...