HDFS為何在大數據領域經久不衰?

      網友投稿 1067 2022-05-28

      1 概述

      1.1 簡介

      Hadoop實現的一個分布式文件系統(Hadoop Distributed File System),簡稱HDFS

      源自于Google的GFS論文,發表于2003年,HDFS是GFS的克隆版

      大數據中最寶貴、最難以代替的就是數據,一切都圍繞數據。

      HDFS是最早的大數據存儲系統,存儲著寶貴的數據資產,各種新算法、框架要想得到廣泛使用,必須支持HDFS,才能獲取已存儲在里面的數據。所以大數據技術越發展,新技術越多,HDFS得到的支持越多,越離不開HDFS。HDFS也許不是最好的大數據存儲技術,但依然是最重要的大數據存儲技術。

      HDFS是如何實現大數據高速、可靠的存儲和訪問的呢?

      Hadoop分布式文件系統HDFS的設計目標是管理數以千計的服務器、數以萬計的磁盤,將大規模的服務器計算資源當作一個單一存儲系統進行管理,對應用程序提供數以PB計的存儲容量,讓應用程序像使用普通文件系統一樣存儲大規模的文件數據。

      1.2 設計目標

      文件以多副本的方式進行存儲:

      filel:node1 node2 node3 file2: node2 node3 node4 file3: node3 node4 node5 file4: node5 node6 node7

      缺點:

      不管文件多大,都存儲在一個節點,在進行數據處理時,很難進行并行處理,節點可能就成為網絡瓶頸,很難進行大數據的處理

      存儲負載很難均衡,每個節點的利用率很低

      優點:

      巨大的分布式文件系統

      運行在普通廉價的硬件

      易擴展、為用戶提供性能不錯的文件存儲服務

      2 如何設計一個分布式文件系統

      HDFS的大容量存儲和高速訪問的實現。

      RAID將數據分片后,在多塊磁盤上并發進行讀寫訪問,提高了存儲容量、加快了訪問速度,并通過數據冗余校驗提高了數據可靠性,即使某塊磁盤損壞也不會丟數據。將RAID的設計理念擴大到整個分布式服務器集群,就產生了分布式文件系統,這便是Hadoop分布式文件系統的核心原理。

      和RAID在多個磁盤上進行文件存儲及并行讀寫的思路一樣,HDFS是在一個大規模分布式服務器集群上,對數據分片后進行并行讀寫及冗余存儲。因為HDFS可部署在一個大的服務器集群,集群中所有服務器的磁盤都可供HDFS使用,所以整個HDFS的存儲空間可以達到PB級。

      HDFS是主從架構。一個HDFS集群會有一個NameNode(命名節點,簡稱NN),作為主服務器(master server)。

      NameNode用于管理文件系統的命名空間以及調節客戶訪問文件

      還有多個DataNode(簡稱DN),數據節點,作為從節點(slave server)存在

      通常每個集群中的DataNode,都會被NameNode所管理,DataNode用于存儲數據

      HDFS公開了文件系統名稱空間,允許用戶將數據存儲在文件中,就好比我們平時使用os中的文件系統一樣,用戶無需關心底層是如何存儲數據的。

      在底層,一個文件會被分成一或多個數據塊,這些數據庫塊會被存儲在一組數據節點中。在CDH中數據塊的默認128M。

      在NameNode,可執行文件系統的命名空間操作,如打開,關閉,重命名文件等。這也決定了數據塊到數據節點的映射。

      HDFS被設計為可運行在普通的廉價機器上,而這些機器通常運行著一個Linux操作系統。一個典型的HDFS集群部署會有一個專門的機器只能運行NameNode,而其他集群中的機器各自運行一個DataNode實例。雖然一臺機器上也可以運行多個節點,但不推薦。

      DataNode

      存儲用戶的文件對應的數據塊(Block)

      會定期向NN發送心跳信息,匯報本身及其所有的block信息和健康狀況

      負責文件數據的存儲和讀寫操作,HDFS將文件數據分割成若干數據塊(Block),每個DataNode存儲一部分Block,這樣文件就分布存儲在整個HDFS服務器集群中。

      應用程序客戶端(Client)可并行訪問這些Block,從而使得HDFS可以在服務器集群規模上實現數據并行訪問,極大提高訪問速度。

      HDFS集群的DataNode服務器會有很多臺,一般在幾百臺到幾千臺,每臺服務器配有數塊磁盤,整個集群的存儲容量大概在幾PB~數百PB。

      NameNode

      負責客戶端請求的響應

      負責元數據(文件的名稱、副本系數、Block存放的DN)的管理

      負責整個分布式文件系統的元數據(MetaData)管理,即文件路徑名、數據塊的ID以及存儲位置等信息,類似os中的文件分配表(FAT)。

      HDFS為保證數據高可用,會將一個Block復制為多份(默認3份),并將多份相同的Block存儲在不同服務器,甚至不同機架。當有磁盤損壞或某個DataNode服務器宕機,甚至某個交換機宕機,導致其存儲的數據塊不能訪問時,客戶端會查找其備份Block訪問。

      3 S副本機制

      HDFS中,一個文件會被拆分為一個或多個數據塊。默認每個數據塊有三個副本,每個副本都存放在不同機器,而且每一個副本都有自己唯一的編號:

      Block多份復制存儲的示意圖

      文件/users/sameerp/data/part-0的復制備份數設為2,存儲的BlockID分別為1、3:

      Block1的兩個備份存儲在DataNode0和DataNode2兩個服務器上

      Block3的兩個備份存儲DataNode4和DataNode6兩個服務器上

      上述任一臺服務器宕機后,每個數據塊都至少還有一個備份存在,不會影響對文件/users/sameerp/data/part-0的訪問。

      和RAID一樣,數據分成若干Block后,存儲到不同服務器,實現數據大容量存儲,并且不同分片的數據能并行進行讀/寫操作,實現數據的高速訪問。

      副本存放策略

      副本存放:NameNode節點選擇一個DataNode節點去存儲block副本的過程,該過程的策略是在可靠性和讀寫帶寬間權衡。

      《Hadoop權威指南》中的默認方式:

      第一個副本會隨機選擇,但是不會選擇存儲過滿的節點

      第二個副本放在和第一個副本不同且隨機選擇的機架

      第三個和第二個放在同一機架上的不同節點

      剩余副本完全隨機節點

      合理性分析

      可靠性:block存儲在兩個機架

      寫帶寬:寫操作僅穿過一個網絡交換機

      讀操作:選擇其中一個機架去讀

      block分布在整個集群

      Google大數據“三駕馬車”的第一駕是GFS(Google 文件系統),而Hadoop的第一個產品是HDFS,分布式文件存儲是分布式計算的基礎。

      這些年來,各種計算框架、各種算法、各種應用場景不斷推陳出新,但大數據存儲的王者依然是HDFS。

      5 HDFS的高可用設計

      5.1 數據存儲故障容錯

      磁盤介質在存儲過程中受環境或者老化影響,其存儲的數據可能會出現錯亂。

      HDFS對存儲在DataNode上的數據塊,計算并存儲校驗和(CheckSum)。在讀數據時,重新計算讀取出來的數據的校驗和,校驗不正確就拋異常,應用程序捕獲異常后就到其他DataNode上讀取備份數據。

      5.2 磁盤故障容錯

      DataNode監測到本機的某塊磁盤損壞,就將該塊磁盤上存儲的所有BlockID報告給NameNode,NameNode檢查這些數據塊還在哪些DataNode上有備份,通知相應的DataNode服務器將對應的數據塊復制到其他服務器上,以保證數據塊的備份數滿足要求。

      5.3 DataNode故障容錯

      DataNode會通過心跳和NameNode保持通信,如果DataNode超時未發送心跳,NameNode就會認為這個DataNode已經宕機失效,立即查找這個DataNode上存儲的數據塊有哪些,以及這些數據塊還存儲在哪些服務器上,隨后通知這些服務器再復制一份數據塊到其他服務器上,保證HDFS存儲的數據塊備份數符合用戶設置的數目,即使再出現服務器宕機,也不會丟失數據。

      5.4 NameNode故障容錯

      NameNode是整個HDFS的核心,記錄著HDFS文件分配表信息,所有的文件路徑和數據塊存儲信息都保存在NameNode,如果NameNode故障,整個HDFS系統集群都無法使用;如果NameNode上記錄的數據丟失,整個集群所有DataNode存儲的數據也就沒用了。

      所以,NameNode高可用容錯能力非常重要。NameNode采用主從熱備的方式提供高可用服務:

      集群部署兩臺NameNode服務器:

      一臺作為主服務器提供服務

      一臺作為從服務器進行熱備

      兩臺服務器通過Zk選舉,主要是通過爭奪znode鎖資源,決定誰是主服務器。而DataNode則會向兩個NameNode同時發送心跳數據,但是只有主NameNode才能向DataNode返回控制信息。

      正常運行期,主從NameNode之間通過一個共享存儲系統shared edits來同步文件系統的元數據信息。當主NameNode服務器宕機,從NameNode會通過ZooKeeper升級成為主服務器,并保證HDFS集群的元數據信息,也就是文件分配表信息完整一致。

      軟件系統,性能差點,用戶也許可接受;使用體驗差,也許也能忍受。但若可用性差,經常出故障不可用,就麻煩了;如果出現重要數據丟失,那開發攤上大事。

      HDFS為何在大數據領域經久不衰?

      而分布式系統可能出故障地方又非常多,內存、CPU、主板、磁盤會損壞,服務器會宕機,網絡會中斷,機房會停電,所有這些都可能會引起軟件系統的不可用,甚至數據永久丟失。

      所以在設計分布式系統的時候,軟件工程師一定要繃緊可用性這根弦,思考在各種可能的故障情況下,如何保證整個軟件系統依然是可用的。

      6 保證系統可用性的策略

      冗余備份

      任何程序、任何數據,都至少要有一個備份,也就是說程序至少要部署到兩臺服務器,數據至少要備份到另一臺服務器上。此外,稍有規模的互聯網企業都會建設多個數據中心,數據中心之間互相進行備份,用戶請求可能會被分發到任何一個數據中心,即所謂的異地多活,在遭遇地域性的重大故障和自然災害的時候,依然保證應用的高可用。

      失效轉移

      當要訪問的程序或者數據無法訪問時,需要將訪問請求轉移到備份的程序或者數據所在的服務器上,這也就是失效轉移。失效轉移你應該注意的是失效的鑒定,像NameNode這樣主從服務器管理同一份數據的場景,如果從服務器錯誤地以為主服務器宕機而接管集群管理,會出現主從服務器一起對DataNode發送指令,進而導致集群混亂,也就是所謂的“腦裂”。這也是這類場景選舉主服務器時,引入ZooKeeper的原因。ZooKeeper的工作原理,我將會在后面專門分析。

      降級

      當大量的用戶請求或者數據處理請求到達的時候,由于計算資源有限,可能無法處理如此大量的請求,進而導致資源耗盡,系統崩潰。這種情況下,可以拒絕部分請求,即進行限流;也可以關閉部分功能,降低資源消耗,即進行降級。限流是互聯網應用的常備功能,因為超出負載能力的訪問流量在何時會突然到來,你根本無法預料,所以必須提前做好準備,當遇到突發高峰流量時,就可以立即啟動限流。而降級通常是為可預知的場景準備的,比如電商的“雙十一”促銷,為了保障促銷活動期間應用的核心功能能夠正常運行,比如下單功能,可以對系統進行降級處理,關閉部分非重要功能,比如商品評價功能。

      總結

      HDFS是如何通過大規模分布式服務器集群實現數據的大容量、高速、可靠存儲、訪問的。

      1.文件數據以數據塊的方式進行切分,數據塊可以存儲在集群任意DataNode服務器上,所以HDFS存儲的文件可以非常大,一個文件理論上可以占據整個HDFS服務器集群上的所有磁盤,實現了大容量存儲。

      2.HDFS一般的訪問模式是通過MapReduce程序在計算時讀取,MapReduce對輸入數據進行分片讀取,通常一個分片就是一個數據塊,每個數據塊分配一個計算進程,這樣就可以同時啟動很多進程對一個HDFS文件的多個數據塊進行并發訪問,從而實現數據的高速訪問。關于MapReduce的具體處理過程,我們會在專欄后面詳細討論。

      3.DataNode存儲的數據塊會進行復制,使每個數據塊在集群里有多個備份,保證了數據的可靠性,并通過一系列的故障容錯手段實現HDFS系統中主要組件的高可用,進而保證數據和整個系統的高可用。

      Hadoop 分布式

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Kafka生產發送數據失敗
      下一篇:云中筑夢人:新年AI新衣
      相關文章
      国产成人精品日本亚洲11| 亚洲av永久无码精品国产精品| 亚洲国产一区二区a毛片| 久久久久亚洲AV无码专区桃色| 亚洲国产一级在线观看| 亚洲6080yy久久无码产自国产| 亚洲色丰满少妇高潮18p| 亚洲 暴爽 AV人人爽日日碰| 亚洲色欲色欲www| 亚洲中文字幕无码亚洲成A人片| 亚洲粉嫩美白在线| 亚洲综合欧美色五月俺也去| 香蕉大伊亚洲人在线观看| 亚洲砖码砖专无区2023| 亚洲日韩久久综合中文字幕| 亚洲爆乳少妇无码激情| 国产精品亚洲精品日韩电影| vvvv99日韩精品亚洲| 国产亚洲精品91| 精品亚洲一区二区三区在线观看| 亚洲国产天堂久久综合| 久久亚洲色一区二区三区| 亚洲中文久久精品无码| 亚洲区小说区激情区图片区| 国产亚洲福利精品一区| 亚洲成熟xxxxx电影| 亚洲男女一区二区三区| 精品亚洲AV无码一区二区三区| 亚洲粉嫩美白在线| 亚洲AⅤ男人的天堂在线观看| 国产av无码专区亚洲av毛片搜 | 亚洲AV网站在线观看| 亚洲人成影院在线无码观看| 亚洲无线观看国产精品| 久久精品国产亚洲AV麻豆~| 亚洲激情中文字幕| 亚洲剧情在线观看| 亚洲成AV人影片在线观看| 亚洲日本韩国在线| 亚洲VA成无码人在线观看天堂 | 久久精品国产99精品国产亚洲性色|