欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Hadoop分布式文件系統(tǒng):架構和設計要點

系統(tǒng) 3753 0

Hadoop 分布式文件系統(tǒng):架構和設計要點
原文:http://hadoop.apache.org/core/docs/current/hdfs_design.html
一、前提和設計目標
1 、硬件錯誤是常態(tài),而非異常情況, HDFS 可能是有成百上千的 server 組成,任何一個組件都有可能一直失效,因此錯誤檢測和快速、自動的恢復是 HDFS 的核心架構目標。
2 、跑在 HDFS 上的應用與一般的應用不同,它們主要是以流式讀為主,做批量處理;比之關注數(shù)據(jù)訪問的低延遲問題,更關鍵的在于數(shù)據(jù)訪問的高吞吐量。
3 HDFS 以支持大數(shù)據(jù)集合為目標,一個存儲在上面的典型文件大小一般都在千兆至 T 字節(jié),一個單一 HDFS 實例應該能支撐數(shù)以千萬計的文件。
4 HDFS 應用對文件要求的是 write-one-read-many 訪問模型。一個文件經過創(chuàng)建、寫,關閉之后就不需要改變。這一假設簡化了數(shù)據(jù)一致性問題,使高吞吐量的數(shù)據(jù)訪問成為可能。典型的如 MapReduce 框架,或者一個 web crawler 應用都很適合這個模型。
5 、移動計算的代價比之移動數(shù)據(jù)的代價低。一個應用請求的計算,離它操作的數(shù)據(jù)越近就越高效,這在數(shù)據(jù)達到海量級別的時候更是如此。將計算移動到數(shù)據(jù)附近,比之將數(shù)據(jù)移動到應用所在顯然更好, HDFS 提供給應用這樣的接口。
6 、在異構的軟硬件平臺間的可移植性。

二、 Namenode Datanode
??? HDFS 采用 master/slave 架構。一個 HDFS 集群是有一個 Namenode 和一定數(shù)目的 Datanode 組成。 Namenode 是一個中心服務器,負責管理文件系統(tǒng)的 namespace 和客戶端對文件的訪問。 Datanode 在集群中一般是一個節(jié)點一個,負責管理節(jié)點上它們附帶的存儲。在內部,一個文件其實分成一個或多個 block ,這些 block 存儲在 Datanode 集合里。 Namenode 執(zhí)行文件系統(tǒng)的 namespace 操作,例如打開、關閉、重命名文件和目錄,同時決定 block 到具體 Datanode 節(jié)點的映射。 Datanode Namenode 的指揮下進行 block 的創(chuàng)建、刪除和復制。 Namenode Datanode 都是設計成可以跑在普通的廉價的運行 linux 的機器上。 HDFS 采用 java 語言開發(fā),因此可以部署在很大范圍的機器上。一個典型的部署場景是一臺機器跑一個單獨的 Namenode 節(jié)點,集群中的其他機器各跑一個 Datanode 實例。這個架構并不排除一臺機器上跑多個 Datanode ,不過這比較少見。

單一節(jié)點的 Namenode 大大簡化了系統(tǒng)的架構。 Namenode 負責保管和管理所有的 HDFS 元數(shù)據(jù),因而用戶數(shù)據(jù)就不需要通過 Namenode (也就是說文件數(shù)據(jù)的讀寫是直接在 Datanode 上)。

三、文件系統(tǒng)的 namespace
?? HDFS 支持傳統(tǒng)的層次型文件組織,與大多數(shù)其他文件系統(tǒng)類似,用戶可以創(chuàng)建目錄,并在其間創(chuàng)建、刪除、移動和重命名文件。 HDFS 不支持 user quotas 和訪問權限,也不支持鏈接( link) ,不過當前的架構并不排除實現(xiàn)這些特性。 Namenode 維護文件系統(tǒng)的 namespace ,任何對文件系統(tǒng) namespace 和文件屬性的修改都將被 Namenode 記錄下來。應用可以設置 HDFS 保存的文件的副本數(shù)目,文件副本的數(shù)目稱為文件的 replication 因子,這個信息也是由 Namenode 保存。

四、數(shù)據(jù)復制
??? HDFS 被設計成在一個大集群中可以跨機器地可靠地存儲海量的文件。它將每個文件存儲成 block 序列,除了最后一個 block ,所有的 block 都是同樣的大小。文件的所有 block 為了容錯都會被復制。每個文件的 block 大小和 replication 因子都是可配置的。 Replication 因子可以在文件創(chuàng)建的時候配置,以后也可以改變。 HDFS 中的文件是 write-one ,并且嚴格要求在任何時候只有一個 writer Namenode 全權管理 block 的復制,它周期性地從集群中的每個 Datanode 接收心跳包和一個 Blockreport 。心跳包的接收表示該 Datanode 節(jié)點正常工作,而 Blockreport 包括了該 Datanode 上所有的 block 組成的列表。


1 、副本的存放,副本的存放是 HDFS 可靠性和性能的關鍵。 HDFS 采用一種稱為 rack-aware 的策略來改進數(shù)據(jù)的可靠性、有效性和網絡帶寬的利用。這個策略實現(xiàn)的短期目標是驗證在生產環(huán)境下的表現(xiàn),觀察它的行為,構建測試和研究的基礎,以便實現(xiàn)更先進的策略。龐大的 HDFS 實例一般運行在多個機架的計算機形成的集群上,不同機架間的兩臺機器的通訊需要通過交換機,顯然通常情況下,同一個機架內的兩個節(jié)點間的帶寬會比不同機架間的兩臺機器的帶寬大。
??? 通過一個稱為 Rack Awareness 的過程, Namenode 決定了每個 Datanode 所屬的 rack id 。一個簡單但沒有優(yōu)化的策略就是將副本存放在單獨的機架上。這樣可以防止整個機架(非副本存放)失效的情況,并且允許讀數(shù)據(jù)的時候可以從多個機架讀取。這個簡單策略設置可以將副本分布在集群中,有利于組件失敗情況下的負載均衡。但是,這個簡單策略加大了寫的代價,因為一個寫操作需要傳輸 block 到多個機架。
??? 在大多數(shù)情況下, replication 因子是 3 HDFS 的存放策略是將一個副本存放在本地機架上的節(jié)點,一個副本放在同一機架上的另一個節(jié)點,最后一個副本放在不同機架上的一個節(jié)點。機架的錯誤遠遠比節(jié)點的錯誤少,這個策略不會影響到數(shù)據(jù)的可靠性和有效性。三分之一的副本在一個節(jié)點上,三分之二在一個機架上,其他保存在剩下的機架中,這一策略改進了寫的性能。

2 、副本的選擇,為了降低整體的帶寬消耗和讀延時, HDFS 會盡量讓 reader 讀最近的副本。如果在 reader 的同一個機架上有一個副本,那么就讀該副本。如果一個 HDFS 集群跨越多個數(shù)據(jù)中心,那么 reader 也將首先嘗試讀本地數(shù)據(jù)中心的副本。

3 SafeMode
??? Namenode 啟動后會進入一個稱為 SafeMode 的特殊狀態(tài),處在這個狀態(tài)的 Namenode 是不會進行數(shù)據(jù)塊的復制的。 Namenode 從所有的 Datanode 接收心跳包和 Blockreport Blockreport 包括了某個 Datanode 所有的數(shù)據(jù)塊列表。每個 block 都有指定的最小數(shù)目的副本。當 Namenode 檢測確認某個 Datanode 的數(shù)據(jù)塊副本的最小數(shù)目,那么該 Datanode 就會被認為是安全的;如果一定百分比(這個參數(shù)可配置)的數(shù)據(jù)塊檢測確認是安全的,那么 Namenode 將退出 SafeMode 狀態(tài),接下來它會確定還有哪些數(shù)據(jù)塊的副本沒有達到指定數(shù)目,并將這些 block 復制到其他 Datanode

五、文件系統(tǒng)元數(shù)據(jù)的持久化
??? Namenode 存儲 HDFS 的元數(shù)據(jù)。對于任何對文件元數(shù)據(jù)產生修改的操作, Namenode 都使用一個稱為 Editlog 的事務日志記錄下來。例如,在 HDFS 中創(chuàng)建一個文件, Namenode 就會在 Editlog 中插入一條記錄來表示;同樣,修改文件的 replication 因子也將往 Editlog 插入一條記錄。 Namenode 在本地 OS 的文件系統(tǒng)中存儲這個 Editlog 。整個文件系統(tǒng)的 namespace ,包括 block 到文件的映射、文件的屬性,都存儲在稱為 FsImage 的文件中,這個文件也是放在 Namenode 所在系統(tǒng)的文件系統(tǒng)上。
??? Namenode 在內存中保存著整個文件系統(tǒng) namespace 和文件 Blockmap 的映像。這個關鍵的元數(shù)據(jù)設計得很緊湊,因而一個帶有 4G 內存的 Namenode 足夠支撐海量的文件和目錄。當 Namenode 啟動時,它從硬盤中讀取 Editlog FsImage ,將所有 Editlog 中的事務作用( apply) 在內存中的 FsImage ,并將這個新版本的 FsImage 從內存中 flush 到硬盤上 , 然后再 truncate 這個舊的 Editlog ,因為這個舊的 Editlog 的事務都已經作用在 FsImage 上了。這個過程稱為 checkpoint 。在當前實現(xiàn)中, checkpoint 只發(fā)生在 Namenode 啟動時,在不久的將來我們將實現(xiàn)支持周期性的 checkpoint
??? Datanode 并不知道關于文件的任何東西,除了將文件中的數(shù)據(jù)保存在本地的文件系統(tǒng)上。它把每個 HDFS 數(shù)據(jù)塊存儲在本地文件系統(tǒng)上隔離的文件中。 Datanode 并不在同一個目錄創(chuàng)建所有的文件,相反,它用啟發(fā)式地方法來確定每個目錄的最佳文件數(shù)目,并且在適當?shù)臅r候創(chuàng)建子目錄。在同一個目錄創(chuàng)建所有的文件不是最優(yōu)的選擇,因為本地文件系統(tǒng)可能無法高效地在單一目錄中支持大量的文件。當一個 Datanode 啟動時,它掃描本地文件系統(tǒng),對這些本地文件產生相應的一個所有 HDFS 數(shù)據(jù)塊的列表,然后發(fā)送報告到 Namenode ,這個報告就是 Blockreport

六、通訊協(xié)議
??? 所有的 HDFS 通訊協(xié)議都是構建在 TCP/IP 協(xié)議上。客戶端通過一個可配置的端口連接到 Namenode ,通過 ClientProtocol Namenode 交互。而 Datanode 是使用 DatanodeProtocol Namenode 交互。從 ClientProtocol Datanodeprotocol 抽象出一個遠程調用 (RPC ),在設計上, Namenode 不會主動發(fā)起 RPC ,而是是響應來自客戶端和 Datanode RPC 請求。

七、健壯性
??? HDFS 的主要目標就是實現(xiàn)在失敗情況下的數(shù)據(jù)存儲可靠性。常見的三種失敗: Namenode failures, Datanode failures 和網絡分割( network partitions)
1 、硬盤數(shù)據(jù)錯誤、心跳檢測和重新復制
??? 每個 Datanode 節(jié)點都向 Namenode 周期性地發(fā)送心跳包。網絡切割可能導致一部分 Datanode Namenode 失去聯(lián)系。 Namenode 通過心跳包的缺失檢測到這一情況,并將這些 Datanode 標記為 dead ,不會將新的 IO 請求發(fā)給它們。寄存在 dead Datanode 上的任何數(shù)據(jù)將不再有效。 Datanode 的死亡可能引起一些 block 的副本數(shù)目低于指定值, Namenode 不斷地跟蹤需要復制的 block ,在任何需要的情況下啟動復制。在下列情況可能需要重新復制:某個 Datanode 節(jié)點失效,某個副本遭到損壞, Datanode 上的硬盤錯誤,或者文件的 replication 因子增大。

2 、集群均衡
?? HDFS 支持數(shù)據(jù)的均衡計劃,如果某個 Datanode 節(jié)點上的空閑空間低于特定的臨界點,那么就會啟動一個計劃自動地將數(shù)據(jù)從一個 Datanode 搬移到空閑的 Datanode 。當對某個文件的請求突然增加,那么也可能啟動一個計劃創(chuàng)建該文件新的副本,并分布到集群中以滿足應用的要求。這些均衡計劃目前還沒有實現(xiàn)。

3 、數(shù)據(jù)完整性
? 從某個 Datanode 獲取的數(shù)據(jù)塊有可能是損壞的,這個損壞可能是由于 Datanode 的存儲設備錯誤、網絡錯誤或者軟件 bug 造成的。 HDFS 客戶端軟件實現(xiàn)了 HDFS 文件內容的校驗和。當某個客戶端創(chuàng)建一個新的 HDFS 文件,會計算這個文件每個 block 的校驗和,并作為一個單獨的隱藏文件保存這些校驗和在同一個 HDFS namespace 下。當客戶端檢索文件內容,它會確認從 Datanode 獲取的數(shù)據(jù)跟相應的校驗和文件中的校驗和是否匹配,如果不匹配,客戶端可以選擇從其他 Datanode 獲取該 block 的副本。

4 、元數(shù)據(jù)磁盤錯誤
??? FsImage Editlog HDFS 的核心數(shù)據(jù)結構。這些文件如果損壞了,整個 HDFS 實例都將失效。因而, Namenode 可以配置成支持維護多個 FsImage Editlog 的拷貝。任何對 FsImage 或者 Editlog 的修改,都將同步到它們的副本上。這個同步操作可能會降低 Namenode 每秒能支持處理的 namespace 事務。這個代價是可以接受的,因為 HDFS 是數(shù)據(jù)密集的,而非元數(shù)據(jù)密集。當 Namenode 重啟的時候,它總是選取最近的一致的 FsImage Editlog 使用。
?? Namenode HDFS 是單點存在,如果 Namenode 所在的機器錯誤,手工的干預是必須的。目前,在另一臺機器上重啟因故障而停止服務的 Namenode 這個功能還沒實現(xiàn)。

5 、快照
?? 快照支持某個時間的數(shù)據(jù)拷貝,當 HDFS 數(shù)據(jù)損壞的時候,可以恢復到過去一個已知正確的時間點。 HDFS 目前還不支持快照功能。

八、數(shù)據(jù)組織
1 、數(shù)據(jù)塊
??? 兼容 HDFS 的應用都是處理大數(shù)據(jù)集合的。這些應用都是寫數(shù)據(jù)一次,讀卻是一次到多次,并且讀的速度要滿足流式讀。 HDFS 支持文件的 write- once-read-many 語義。一個典型的 block 大小是 64MB ,因而,文件總是按照 64M 切分成 chunk ,每個 chunk 存儲于不同的 Datanode
2 、步驟
??? 某個客戶端創(chuàng)建文件的請求其實并沒有立即發(fā)給 Namenode ,事實上, HDFS 客戶端會將文件數(shù)據(jù)緩存到本地的一個臨時文件。應用的寫被透明地重定向到這個臨時文件。當這個臨時文件累積的數(shù)據(jù)超過一個 block 的大小(默認 64M) ,客戶端才會聯(lián)系 Namenode Namenode 將文件名插入文件系統(tǒng)的層次結構中,并且分配一個數(shù)據(jù)塊給它,然后返回 Datanode 的標識符和目標數(shù)據(jù)塊給客戶端。客戶端將本地臨時文件 flush 到指定的 Datanode 上。當文件關閉時,在臨時文件中剩余的沒有 flush 的數(shù)據(jù)也會傳輸?shù)街付ǖ? Datanode ,然后客戶端告訴 Namenode 文件已經關閉。此時 Namenode 才將文件創(chuàng)建操作提交到持久存儲。如果 Namenode 在文件關閉前掛了,該文件將丟失。
?? 上述方法是對通過對 HDFS 上運行的目標應用認真考慮的結果。如果不采用客戶端緩存,由于網絡速度和網絡堵塞會對吞估量造成比較大的影響。

3 、流水線復制
??? 當某個客戶端向 HDFS 文件寫數(shù)據(jù)的時候,一開始是寫入本地臨時文件,假設該文件的 replication 因子設置為 3 ,那么客戶端會從 Namenode 獲取一張 Datanode 列表來存放副本。然后客戶端開始向第一個 Datanode 傳輸數(shù)據(jù),第一個 Datanode 一小部分一小部分( 4kb) 地接收數(shù)據(jù),將每個部分寫入本地倉庫,并且同時傳輸該部分到第二個 Datanode 節(jié)點。第二個 Datanode 也是這樣,邊收邊傳,一小部分一小部分地收,存儲在本地倉庫,同時傳給第三個 Datanode ,第三個 Datanode 就僅僅是接收并存儲了。這就是流水線式的復制。

九、可訪問性
??? HDFS 給應用提供了多種訪問方式,可以通過 DFSShell 通過命令行與 HDFS 數(shù)據(jù)進行交互,可以通過 java API 調用,也可以通過 C 語言的封裝 API 訪問,并且提供了瀏覽器訪問的方式。正在開發(fā)通過 WebDav 協(xié)議訪問的方式。具體使用參考文檔。
十、空間的回收
1 、文件的刪除和恢復
??? 用戶或者應用刪除某個文件,這個文件并沒有立刻從 HDFS 中刪除。相反, HDFS 將這個文件重命名,并轉移到 /trash 目錄。當文件還在 /trash 目錄時,該文件可以被迅速地恢復。文件在 /trash 中保存的時間是可配置的,當超過這個時間, Namenode 就會將該文件從 namespace 中刪除。文件的刪除,也將釋放關聯(lián)該文件的數(shù)據(jù)塊。注意到,在文件被用戶刪除和 HDFS 空閑空間的增加之間會有一個等待時間延遲。
??? 當被刪除的文件還保留在 /trash 目錄中的時候,如果用戶想恢復這個文件,可以檢索瀏覽 /trash 目錄并檢索該文件。 /trash 目錄僅僅保存被刪除文件的最近一次拷貝。 /trash 目錄與其他文件目錄沒有什么不同,除了一點: HDFS 在該目錄上應用了一個特殊的策略來自動刪除文件,目前的默認策略是刪除保留超過 6 小時的文件,這個策略以后會定義成可配置的接口。

2 Replication 因子的減小
??? 當某個文件的 replication 因子減小, Namenode 會選擇要刪除的過剩的副本。下次心跳檢測就將該信息傳遞給 Datanode Datanode 就會移除相應的 block 并釋放空間,同樣,在調用 setReplication 方法和集群中的空閑空間增加之間會有一個時間延遲。

參考資料:
HDFS Java API: http://hadoop.apache.org/core/docs/current/api/
HDFS source code: http://hadoop.apache.org/core/version_control.html
???

Hadoop分布式文件系統(tǒng):架構和設計要點


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 四虎影视在线看免费 720p | 国产视频在 | 亚洲精品第一国产综合野 | 富二代精品视频 | 国产成人综合在线观看网站 | 国产婷婷在线观看 | 玖玖精品视频在线观看 | 日本www.在线中文字幕 | 99久久免费中文字幕精品 | 国产深夜福利在线观看网站 | 三级免费黄 | 欧美亚洲欧美区 | 欧美成人性生活 | 五月天亚洲综合 | 日本三级2018亚洲视频 | 日韩av片网站 | 色偷偷网址 | 久久只有这才是精品99 | 成人黄色在线观看 | 成人小视频在线观看免费 | 91免费在线播放 | 激情视频在线观看网站 | 日韩在线视频观看 | 国产欧美一区二区视频 | 欧美操片| 天天澡天天碰天天狠伊人五月 | 欧美成人午夜免费完成 | 一级黄色片武则天 | 欧美视频国产 | 天天夜干 | 奇米视频888 | 中文字幕成人乱码在线电影 | 91免费国产在线 | 国产亚洲精品2021自在线 | 古装三级在线观看 | 91免费在线看 | 99re6热只有精品免费观看 | 国产成人一区二区三区 | 色tv国产| a免费国产一级特黄aa大 | 亚洲一区二区三区在线视频 |