1. 首頁
  2. 站長新聞

兄弟,這種思路講解HDFS你肯定沒見過,快速入門Hadoop必備

阿里架構師寫出的超詳細BI工具劃分,讓你選型少踩坑

昨天和一個做信息化主任的朋友聊天,聊到了BI工具,說他們公司最近上的BI系統,爛的要命,決策層領導圖便宜,用了口碑不怎么好的那個,根本滿足不了業務的場景需求,到時候出問題還得

周五周六的時候發了TCP協議,取了個比較夸張的標題:看不懂就來打我,底下都是評論問我在哪。哈哈哈哈哈。不過話說回來,我講TCP也有3次了,怎么可能看不懂,3篇合起來看阿朋友們,算了下周再寫一篇吧,想看的評論里扣1或者私聊我。

视频app丝瓜 那咱們還是回到老話題上來,hadoop的組件講解,總不能天天即興發揮,今天講分布式文件系統HDFS。

從RAID說起

视频app丝瓜 大數據技術主要要解決的問題的是大規模數據的計算處理問題,那么首先要解決的就是大規模數據的存儲問題。大規模數據存儲要解決的核心問題有三個方面:

  • 數據存儲容量的問題,既然大數據要解決的是數以PB計的數據計算問題,而一般的服務器磁盤容量通常1-2TB,那么如何存儲這么大規模的數據。
  • 數據讀寫速度的問題,一般磁盤的連續讀寫速度為幾十MB,以這樣的速度,幾十PB的數據恐怕要讀寫到天荒地老。
  • 數據可靠性的問題,磁盤大約是計算機設備中最易損壞的硬件了,在網站一塊磁盤使用壽命大概是一年,如果磁盤損壞了,數據怎么辦?

在大數據技術出現之前,人們就需要面對這些關于存儲的問題,對應的解決方案就是RAID技術。

视频app丝瓜 RAID(獨立磁盤冗余陣列)技術主要是為了改善磁盤的存儲容量,讀寫速度,增強磁盤的可用性和容錯能力。目前服務器級別的計算機都支持插入多塊磁盤(8塊或者更多),通過使用RAID技術,實現數據在多塊磁盤上的并發讀寫和數據備份。

常用RAID技術有以下幾種,如圖所示。

兄弟,這種思路講解HDFS你肯定沒見過,快速入門Hadoop必備

视频app丝瓜 常用RAID技術原理圖

假設服務器有N塊磁盤。

RAID0

视频app丝瓜 數據在從內存緩沖區寫入磁盤時,根據磁盤數量將數據分成N份,這些數據同時并發寫入N塊磁盤,使得數據整體寫入速度是一塊磁盤的N倍。讀取的時候也一樣,因此RAID0具有極快的數據讀寫速度,但是RAID0不做數據備份,N塊磁盤中只要有一塊損壞,數據完整性就被破壞,所有磁盤的數據都會損壞。

RAID1

數據在寫入磁盤時,將一份數據同時寫入兩塊磁盤,這樣任何一塊磁盤損壞都不會導致數據丟失,插入一塊新磁盤就可以通過復制數據的方式自動修復,具有極高的可靠性。

RAID10

视频app丝瓜 結合RAID0和RAID1兩種方案,將所有磁盤平均分成兩份,數據同時在兩份磁盤寫入,相當于RAID1,但是在每一份磁盤里面的N/2塊磁盤上,利用RAID0技術并發讀寫,既提高可靠性又改善性能,不過RAID10的磁盤利用率較低,有一半的磁盤用來寫備份數據。

RAID3

一般情況下,一臺服務器上不會出現同時損壞兩塊磁盤的情況,在只損壞一塊磁盤的情況下,如果能利用其他磁盤的數據恢復損壞磁盤的數據,這樣在保證可靠性和性能的同時,磁盤利用率也得到大幅提升。

在數據寫入磁盤的時候,將數據分成N-1份,并發寫入N-1塊磁盤,并在第N塊磁盤記錄校驗數據,任何一塊磁盤損壞(包括校驗數據磁盤),都可以利用其他N-1塊磁盤的數據修復。

但是在數據修改較多的場景中,任何磁盤修改數據都會導致第N塊磁盤重寫校驗數據,頻繁寫入的后果是第N塊磁盤比其他磁盤容易損壞,需要頻繁更換,所以RAID3很少在實踐中使用。

RAID5

相比RAID3,更多被使用的方案是RAID5。

自從看了這篇HDFS讀寫數據流,面試不怕了,offer也來了

前幾天面試的時候,問到一個經典問題就是HDFS讀寫數據流的流程是怎么樣的? HDFS作為分布式存儲的基石,讀寫流程是很重要的一個知識點和面試點。 HDFS寫數據流程 1、剖析文件寫入 客戶端通

RAID5和RAID3很相似,但是校驗數據不是寫入第N塊磁盤,而是螺旋式地寫入所有磁盤中。這樣校驗數據的修改也被平均到所有磁盤上,避免RAID3頻繁寫壞一塊磁盤的情況。

RAID6

视频app丝瓜 如果數據需要很高的可靠性,在出現同時損壞兩塊磁盤的情況下(或者運維管理水平比較落后,壞了一塊磁盤但是遲遲沒有更換,導致又壞了一塊磁盤),仍然需要修復數據,這時候可以使用RAID6。

RAID6和RAID5類似,但是數據只寫入N-2塊磁盤,并螺旋式地在兩塊磁盤中寫入校驗信息(使用不同算法生成)。

视频app丝瓜 在相同磁盤數目(N)的情況下,各種RAID技術的比較如下表所示。

兄弟,這種思路講解HDFS你肯定沒見過,快速入門Hadoop必備

幾種RAID技術比較

视频app丝瓜 RAID技術有硬件實現,比如專用的RAID卡或者主板直接支持,也可以通過軟件實現,在操作系統層面將多塊磁盤組成RAID,在邏輯視作一個訪問目錄。RAID技術在傳統關系數據庫及文件系統中應用比較廣泛,是改善計算機存儲特性的重要手段。

RAID技術只是在單臺服務器的多塊磁盤上組成陣列,大數據需要更大規模的存儲空間和訪問速度。將RAID技術原理應用到分布式服務器集群上,就形成了Hadoop分布式文件系統HDFS的架構思想。

HDFS架構原理

视频app丝瓜 和RAID在多個磁盤上進行文件存儲及并行讀寫一樣思路,HDFS在一個大規模分布式服務器集群上,對數據進行并行讀寫及冗余存儲。因為HDFS可以部署在一個比較大的服務器集群上,集群中所有服務器的磁盤都可以供HDFS使用,所以整個HDFS的存儲空間可以達到PB級容量。HDFS架構如圖。

兄弟,這種思路講解HDFS你肯定沒見過,快速入門Hadoop必備

HDFS架構

视频app丝瓜 HDFS中關鍵組件有兩個,一個是NameNode,一個是DataNode。

DataNode負責文件數據的存儲和讀寫操作,HDFS將文件數據分割成若干塊(block),每個DataNode存儲一部分block,這樣文件就分布存儲在整個HDFS服務器集群中。應用程序客戶端(Client)可以并行對這些數據塊進行訪問,從而使得HDFS可以在服務器集群規模上實現數據并行訪問,極大地提高訪問速度。實踐中HDFS集群的DataNode服務器會有很多臺,一般在幾百臺到幾千臺這樣的規模,每臺服務器配有數塊磁盤,整個集群的存儲容量大概在幾PB到數百PB。

NameNode負責整個分布式文件系統的元數據(MetaData)管理,也就是文件路徑名,數據block的ID以及存儲位置等信息,承擔著操作系統中文件分配表(FAT)的角色。HDFS為了保證數據的高可用,會將一個block復制為多份(缺省情況為3份),并將三份相同的block存儲在不同的服務器上。這樣當有磁盤損壞或者某個DataNode服務器宕機導致其存儲的block不能訪問的時候,Client會查找其備份的block進行訪問。

block多份復制存儲如下圖所示,對于文件/users/sameerp/data/part-0,其復制備份數設置為2,存儲的block id為1,3。block1的兩個備份存儲在DataNode0和DataNode2兩個服務器上,block3的兩個備份存儲DataNode4和DataNode6兩個服務器上,上述任何一臺服務器宕機后,每個block都至少還有一個備份存在,不會影響對文件/users/sameerp/data/part-0的訪問。

兄弟,這種思路講解HDFS你肯定沒見過,快速入門Hadoop必備

视频app丝瓜 HDFS的block復制備份策略

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

HDFS應用

视频app丝瓜 Hadoop分布式文件系統可以象一般的文件系統那樣進行訪問:使用命令行或者編程語言API進行文件讀寫操作。我們以HDFS寫文件為例看HDFS處理過程,如下圖。

兄弟,這種思路講解HDFS你肯定沒見過,快速入門Hadoop必備

 

HDFS寫文件操作

  • 應用程序Client調用HDFS API,請求創建文件,HDFS API包含在Client進程中。
  • HDFS API將請求參數發送給NameNode服務器,NameNode在meta信息中創建文件路徑,并查找DataNode中空閑的block。然后將空閑block的id、對應的DataNode服務器信息返回給Client。因為數據塊需要多個備份,所以即使Client只需要一個block的數據量,NameNode也會返回多個NameNode信息。
  • Client調用HDFS API,請求將數據流寫出。
  • HDFS API連接第一個DataNode服務器,將Client數據流發送給DataNode,該DataNode一邊將數據寫入本地磁盤,一邊發送給第二個DataNode。同理第二個DataNode記錄數據并發送給第三個DataNode。
  • Client通知NameNode文件寫入完成,NameNode將文件標記為正常,可以進行讀操作了。

HDFS雖然提供了API,但是在實踐中,我們很少自己編程直接去讀取HDFS中的數據,原因正如開篇提到,在大數據場景下,移動計算比移動數據更劃算。于其寫程序去讀取分布在這么多DataNode上的數據,不如將程序分發到DataNode上去訪問其上的block數據。但是如何對程序進行分發?分發出去的程序又如何訪問HDFS上的數據?計算的結果如何處理,如果結果需要合并,該如何合并?

Hadoop提供了對存儲在HDFS上的大規模數據進行并行計算的框架,就是我們之前講的MapReduce,

基于hadoop架構的企業數字化轉型,阿里數據中臺實戰案例

视频app丝瓜昨天有網友問我: 大型傳統企業如何在公司級數據整合、數據治理、數據運營中把握好業務和數據的關系,逐步實現智能化轉型? 背景: 大型傳統企業,通常都面臨業務系統數據孤島、各板

视频app丝瓜原創文章,作者:ajseo,如若轉載,請注明出處:http://tjxingying.com/itnews/13058.html


聯系我們

13071972829

在線咨詢:

视频app丝瓜郵件:207985384@qq.com

工作時間:周一至周五,9:30-18:30,節假日休息

QR code