從0學大資料 1初識HDFS

2021-10-01 02:24:36 字數 2695 閱讀 1452

hdfs是在乙個大規模分布式伺服器集群上,對資料分片後進行並行讀寫及冗餘儲存。

hdfs的關鍵元件有兩個:datanode,namenode。

datanode負責檔案資料的儲存和讀寫操作,hdfs將檔案資料分割成若干資料塊(block),每個datanode儲存一部分資料塊,這樣檔案就分布儲存在整個hdfs伺服器集群中。應用程式客戶端(client)可以並行對這些資料塊進行訪問,從而使得hdfs可以在伺服器集群規模上實現資料並行訪問,極大地提高了訪問速度。

namenode負責整個分布式檔案系統的元資料(metadata)管理,也就是檔案路徑名、資料塊的id以及儲存位置等資訊,相當於作業系統中檔案分配表(fat)的角色

1.資料儲存故障容錯

磁碟介質在儲存過程中受環境或者老化影響,其儲存的資料可能會出現錯亂。hdfs的應對措施是,對於儲存在datanode上的資料塊,計算並儲存校驗和(checksum)。在讀取資料的時候,重新計算讀取出來的資料的校驗和,如果校驗不正確就丟擲異常,應用程式捕獲異常後就到其他datanode上讀取備份資料。

2.磁碟故障容錯

如果datanode監測到本機的某塊磁碟損壞,就將該塊磁碟上儲存的所有blockid報告給namenode,namenode檢查這些資料塊還在哪些datanode上有備份,通知相應的datanode伺服器將對應的資料塊複製到其他伺服器上,以保證資料塊的備份數滿足要求。

3.datanode故障容錯

datanode會通過心跳和namenode保持通訊,如果datanode超時未傳送心跳,namenode就會認為這個datanode已經宕機失效,立即查詢這個datanode上儲存的資料塊有哪些,以及這些資料塊還儲存在哪些伺服器上,隨後通知這些伺服器再複製乙份資料塊到其他伺服器上,保證hdfs儲存的資料塊備份數符合使用者設定的數目,即使再出現伺服器宕機,也不會丟失資料。

4.namenode故障容錯

namenode是整個hdfs的核心,記錄著hdfs檔案分配表資訊,所有的檔案路徑和資料塊儲存資訊都儲存在namenode,如果namenode故障,整個hdfs系統集群都無法使用;如果namenode上記錄的資料丟失,整個集群所有datanode儲存的資料也就沒用了。

所以,namenode高可用容錯能力非常重要。namenode採用主從熱備的方式提供高可用服務,如下圖。

集群部署兩台namenode伺服器,一台作為主伺服器提供服務,一台作為從伺服器進行熱備,兩台伺服器通過zookeeper選舉,主要是通過爭奪znode鎖資源,決定誰是主伺服器。而datanode則會向兩個namenode同時傳送心跳資料,但是只有主namenode才能向datanode返回控制資訊。

正常執行期間,主從namenode之間通過乙個共享儲存系統shared edits來同步檔案系統的元資料資訊。當主namenode伺服器宕機,從namenode會通過zookeeper公升級成為主伺服器,並保證hdfs集群的元資料資訊,也就是檔案分配表資訊完整一致。

常用的保證系統可用性的策略有冗餘備份、失效轉移和降級限流。

比如冗餘備份,任何程式、任何資料,都至少要有乙個備份,也就是說程式至少要部署到兩台伺服器,資料至少要備份到另一台伺服器上。此外,稍有規模的網際網路企業都會建設多個資料中心,資料中心之間互相進行備份,使用者請求可能會被分發到任何乙個資料中心,即所謂的異地多活,在遭遇地域性的重大故障和自然災害的時候,依然保證應用的高可用。

當要訪問的程式或者資料無法訪問時,需要將訪問請求轉移到備份的程式或者資料所在的伺服器上,這也就是失效轉移。失效轉移你應該注意的是失效的鑑定,像namenode這樣主從伺服器管理同乙份資料的場景,如果從伺服器錯誤地以為主伺服器宕機而接管集群管理,會出現主從伺服器一起對datanode傳送指令,進而導致集群混亂,也就是所謂的「腦裂」。這也是這類場景選舉主伺服器時,引入zookeeper的原因。

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

1.檔案資料以資料塊的方式進行切分,資料塊可以儲存在集群任意datanode伺服器上,所以hdfs儲存的檔案可以非常大,乙個檔案理論上可以佔據整個hdfs伺服器集群上的所有磁碟,實現了大容量儲存。

2.hdfs一般的訪問模式是通過mapreduce程式在計算時讀取,mapreduce對輸入資料進行分片讀取,通常乙個分片就是乙個資料塊,每個資料塊分配乙個計算程序,這樣就可以同時啟動很多程序對乙個hdfs檔案的多個資料塊進行併發訪問,從而實現資料的高速訪問。

3.datanode儲存的資料塊會進行複製,使每個資料塊在集群裡有多個備份,保證了資料的可靠性,並通過一系列的故障容錯手段實現hdfs系統中主要元件的高可用,進而保證資料和整個系統的高可用。

大資料學習Hdfs詳解1

hdfs架構設計 主從 nn 主 名稱節點 扮演老大的角色 snn 第二名稱節點 nn 扮演二把手的角色 dn 從 資料節點 扮演小弟的角色 dfs.blocksize 134217728 128m 不滿128m也算乙個塊 例如 hdfs site.xml下的引數dfs.replication 為1...

大資料從0到一 Hadoop

系統瓶頸 google大資料技術 儲存容量 bigtable 讀寫速度 gfs 計算效率 mapreduce 在官方 進行學習 在官方 學習英文文件進行學習 專案實戰對知識點進行鞏固和融會貫通 社群活動 meetup infoq hadoop 分布式儲存 計算 可拓展 穩定的開源框架 可以做 搭建大...

從0到1搭建大資料平台之資料採集系統

關於從0到1搭建大資料平台,之前的一篇博文 如何從0到1搭建大資料平台 已經給大家介紹過了,接下來我們會分步講解搭建大資料平台的具體注意事項。當你需要搭建大資料平台的時候一定是傳統的關係型資料庫無法滿足業務的儲存計算要求了,所以首先我們面臨的是海量的資料。複雜資料的概念和理想資料完全相反。所有資料集...