自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

HDFS 為何在大數(shù)據(jù)領域經(jīng)久不衰?

大數(shù)據(jù) 數(shù)據(jù)倉庫
HDFS是最早的大數(shù)據(jù)存儲系統(tǒng),存儲著寶貴的數(shù)據(jù)資產(chǎn),各種新算法、框架要想得到廣泛使用,必須支持HDFS,才能獲取已存儲在里面的數(shù)據(jù)。所以大數(shù)據(jù)技術越發(fā)展,新技術越多,HDFS得到的支持越多,越離不開HDFS。

1.概述

1.1 簡介

  • Hadoop實現(xiàn)的一個分布式文件系統(tǒng)(Hadoop Distributed File System),簡稱HDFS。
  • 源自于Google的GFS論文,發(fā)表于2003年,HDFS是GFS的克隆版。

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

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

HDFS是如何實現(xiàn)大數(shù)據(jù)高速、可靠的存儲和訪問的呢?

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

1.2 設計目標

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

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

缺點:

  • 不管文件多大,都存儲在一個節(jié)點,在進行數(shù)據(jù)處理時,很難進行并行處理,節(jié)點可能就成為網(wǎng)絡瓶頸,很難進行大數(shù)據(jù)的處理。
  • 存儲負載很難均衡,每個節(jié)點的利用率很低。

優(yōu)點:

  • 巨大的分布式文件系統(tǒng)。
  • 運行在普通廉價的硬件。
  • 易擴展、為用戶提供性能不錯的文件存儲服務。

2 .如何設計一個分布式文件系統(tǒng)

HDFS的大容量存儲和高速訪問的實現(xiàn)。

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

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

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

  • NameNode用于管理文件系統(tǒng)的命名空間以及調節(jié)客戶訪問文件。
  • 還有多個DataNode(簡稱DN),數(shù)據(jù)節(jié)點,作為從節(jié)點(slave server)存。
  • 通常每個集群中的DataNode,都會被NameNode所管理,DataNode用于存儲數(shù)據(jù)。

HDFS公開了文件系統(tǒng)名稱空間,允許用戶將數(shù)據(jù)存儲在文件中,就好比我們平時使用os中的文件系統(tǒng)一樣,用戶無需關心底層是如何存儲數(shù)據(jù)的。 在底層,一個文件會被分成一或多個數(shù)據(jù)塊,這些數(shù)據(jù)庫塊會被存儲在一組數(shù)據(jù)節(jié)點中。在CDH中數(shù)據(jù)塊的默認128M。 在NameNode,可執(zhí)行文件系統(tǒng)的命名空間操作,如打開,關閉,重命名文件等。這也決定了數(shù)據(jù)塊到數(shù)據(jù)節(jié)點的映射。

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

DataNode

  • 存儲用戶的文件對應的數(shù)據(jù)塊(Block)
  • 會定期向NN發(fā)送心跳信息,匯報本身及其所有的block信息和健康狀況

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

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

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

NameNode

  • 負責客戶端請求的響應
  • 負責元數(shù)據(jù)(文件的名稱、副本系數(shù)、Block存放的DN)的管理

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

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

3.S副本機制

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

Block多份復制存儲的示意圖

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

  • Block1的兩個備份存儲在DataNode0和DataNode2兩個服務器上。
  • Block3的兩個備份存儲DataNode4和DataNode6兩個服務器上。

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

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

副本存放策略

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

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

  • 第一個副本會隨機選擇,但是不會選擇存儲過滿的節(jié)點
  • 第二個副本放在和第一個副本不同且隨機選擇的機架
  • 第三個和第二個放在同一機架上的不同節(jié)點
  • 剩余副本完全隨機節(jié)點

合理性分析

  • 可靠性:block存儲在兩個機架
  • 寫帶寬:寫操作僅穿過一個網(wǎng)絡交換機
  • 讀操作:選擇其中一個機架去讀
  • block分布在整個集群

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

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

5.HDFS的高可用設計

5.1 數(shù)據(jù)存儲故障容錯

磁盤介質在存儲過程中受環(huán)境或者老化影響,其存儲的數(shù)據(jù)可能會出現(xiàn)錯亂。

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

5.2 磁盤故障容錯

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

5.3 DataNode故障容錯

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

5.4 NameNode故障容錯

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

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

集群部署兩臺NameNode服務器:

  • 一臺作為主服務器提供服務
  • 一臺作為從服務器進行熱備

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

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

軟件系統(tǒng),性能差點,用戶也許可接受;使用體驗差,也許也能忍受。但若可用性差,經(jīng)常出故障不可用,就麻煩了;如果出現(xiàn)重要數(shù)據(jù)丟失,那開發(fā)攤上大事。

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

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

6.保證系統(tǒng)可用性的策略

冗余備份

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

失效轉移

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

降級

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

總結

HDFS是如何通過大規(guī)模分布式服務器集群實現(xiàn)數(shù)據(jù)的大容量、高速、可靠存儲、訪問的。

  1. 文件數(shù)據(jù)以數(shù)據(jù)塊的方式進行切分,數(shù)據(jù)塊可以存儲在集群任意DataNode服務器上,所以HDFS存儲的文件可以非常大,一個文件理論上可以占據(jù)整個HDFS服務器集群上的所有磁盤,實現(xiàn)了大容量存儲。
  2. HDFS一般的訪問模式是通過MapReduce程序在計算時讀取,MapReduce對輸入數(shù)據(jù)進行分片讀取,通常一個分片就是一個數(shù)據(jù)塊,每個數(shù)據(jù)塊分配一個計算進程,這樣就可以同時啟動很多進程對一個HDFS文件的多個數(shù)據(jù)塊進行并發(fā)訪問,從而實現(xiàn)數(shù)據(jù)的高速訪問。關于MapReduce的具體處理過程,我們會在專欄后面詳細討論。
  3. DataNode存儲的數(shù)據(jù)塊會進行復制,使每個數(shù)據(jù)塊在集群里有多個備份,保證了數(shù)據(jù)的可靠性,并通過一系列的故障容錯手段實現(xiàn)HDFS系統(tǒng)中主要組件的高可用,進而保證數(shù)據(jù)和整個系統(tǒng)的高可用。


責任編輯:華軒 來源: 今日頭條
相關推薦

2012-08-23 10:31:37

2016-03-01 11:40:02

SaaS網(wǎng)絡效應生態(tài)系統(tǒng)創(chuàng)建

2021-06-15 17:13:20

數(shù)據(jù)存儲硬盤固態(tài)盤

2019-09-26 09:00:31

Java編程語言

2022-08-12 15:59:18

區(qū)塊鏈加密貨幣系統(tǒng)

2017-02-27 16:35:00

HDFS大數(shù)據(jù)分析

2021-03-15 08:40:46

數(shù)據(jù)分析波動

2023-03-16 19:23:39

2015-05-20 09:52:47

2024-01-30 01:12:37

自然語言時間序列預測Pytorch

2022-02-16 16:09:12

鴻蒙游戲操作系統(tǒng)

2015-07-27 15:27:11

程序員重寫代碼

2021-01-25 22:04:30

WindowsCoodesker工具

2020-12-18 17:06:50

Windows工具開源

2021-12-01 15:21:14

程序員技能互聯(lián)網(wǎng)

2016-02-29 11:54:11

手機屏幕尺寸iPone5se

2017-11-20 08:13:26

大數(shù)據(jù)大數(shù)據(jù)技術數(shù)據(jù)

2021-11-30 09:51:19

微軟操作系統(tǒng)Windows

2022-08-09 08:02:36

Python人物關系紅樓夢

2021-04-14 09:04:03

大數(shù)據(jù)HDFS大數(shù)據(jù)開發(fā)
點贊
收藏

51CTO技術棧公眾號