目錄
HDFS文件系統(tǒng)?
1、文件系統(tǒng)定義
2、大數(shù)據(jù)時(shí)代,面對(duì)海量數(shù)據(jù),傳統(tǒng)的文件存儲(chǔ)系統(tǒng)會(huì)面臨哪些挑戰(zhàn)?
3、分布式存儲(chǔ)系統(tǒng)的核心屬性及功能含義
一、分布式存儲(chǔ)的優(yōu)點(diǎn)
二、元數(shù)據(jù)記錄的功能
三、分塊存儲(chǔ)好處
四、副本機(jī)制的作用
4、HDFS簡(jiǎn)介
HDFS適用場(chǎng)景
5、HDFS主從架構(gòu)
分塊存儲(chǔ)
副本機(jī)制
元數(shù)據(jù)管理
數(shù)據(jù)塊存儲(chǔ)
6、HDFS shell操作
常用操作:
7、HDFS工作流程與機(jī)制
主角色:NameNode
namenode職責(zé):
從角色:datanode
datanode職責(zé)
8、HDFS讀寫(xiě)數(shù)據(jù)的過(guò)程??????
核心概念--Pipeline管道
核心概念--ACK應(yīng)答響應(yīng)
默認(rèn)3個(gè)副本存儲(chǔ)策略:
寫(xiě)操作的整個(gè)過(guò)程:
讀操作的整個(gè)過(guò)程:
HDFS文件系統(tǒng)?
1、文件系統(tǒng)定義
文件系統(tǒng)是一種存儲(chǔ)和組織數(shù)據(jù)的方法,實(shí)現(xiàn)了數(shù)據(jù)的存儲(chǔ),分離組織,訪問(wèn)和獲取等操作,使得用戶對(duì)文件訪問(wèn)和查找變得容易。
文件系統(tǒng)使用樹(shù)形目錄的抽象邏輯概念代替了硬盤(pán)等物理設(shè)備使用數(shù)據(jù)塊的概念,用戶不必關(guān)心數(shù)據(jù)底層存在硬盤(pán)哪里,只需要記住這個(gè)文件的所屬目錄和文件名即可。
文件系統(tǒng)通常使用硬盤(pán)和光盤(pán)這樣的存儲(chǔ)設(shè)備,并維護(hù)文件在設(shè)備中的物理位置。
?? ?所謂傳統(tǒng)常見(jiàn)的文件系統(tǒng)更多指的的單機(jī)的文件系統(tǒng),也就是底層不會(huì)橫跨多臺(tái)機(jī)器實(shí)現(xiàn)。比如windows操作系統(tǒng)
上的文件系統(tǒng)、Linux上的文件系統(tǒng)、FTP文件系統(tǒng)等等。
?? ?這些文件系統(tǒng)的共同特征包括:
?? ??? ?1. 帶有抽象的目錄樹(shù)結(jié)構(gòu),樹(shù)都是從/根目錄開(kāi)始往下蔓延;
?? ??? ?2. 樹(shù)中節(jié)點(diǎn)分為兩類:目錄和文件;
?? ??? ?3. 從根目錄開(kāi)始,節(jié)點(diǎn)路徑具有唯一性。?
##########################################################?
2、大數(shù)據(jù)時(shí)代,面對(duì)海量數(shù)據(jù),傳統(tǒng)的文件存儲(chǔ)系統(tǒng)會(huì)面臨哪些挑戰(zhàn)?
成本高:
??? ??? ?傳統(tǒng)存儲(chǔ)硬件通用性差,設(shè)備投資加上后期維護(hù),升級(jí)擴(kuò)容的成本非常高
如何支撐高效率的計(jì)算分析:
??? ??? ?傳統(tǒng)的存儲(chǔ)方式意味著數(shù)據(jù):存儲(chǔ)是存儲(chǔ),計(jì)算是計(jì)算,當(dāng)需要處理數(shù)據(jù)的時(shí)候把數(shù)據(jù)移動(dòng)過(guò)來(lái),
??? ??? ?程序和數(shù)據(jù)存儲(chǔ)是屬于不同的技術(shù)廠商實(shí)現(xiàn),無(wú)法有機(jī)統(tǒng)一整合在一起。
性能差:
??? ??? ?單節(jié)點(diǎn)I/O性能瓶頸無(wú)法逾越,難以支撐海量數(shù)據(jù)的高并發(fā)吞吐場(chǎng)景。
可擴(kuò)展性差:
??? ??? ?無(wú)法實(shí)現(xiàn)快速部署和彈性擴(kuò)展,動(dòng)態(tài)擴(kuò)容,縮容成本高,技術(shù)實(shí)現(xiàn)難度大。
##########################################################??
3、分布式存儲(chǔ)系統(tǒng)的核心屬性及功能含義
分布式存儲(chǔ)系統(tǒng)核心屬性
? 分布式存儲(chǔ)
? 元數(shù)據(jù)記錄
? 分塊存儲(chǔ)
? 副本機(jī)制
##########################################################??
一、分布式存儲(chǔ)的優(yōu)點(diǎn)
問(wèn)題:數(shù)據(jù)量大,單機(jī)存儲(chǔ)遇到瓶頸
解決:
??? ??? ?單機(jī)縱向擴(kuò)展:磁盤(pán)不夠加磁盤(pán),有上限瓶頸限制
??? ??? ?多機(jī)橫向擴(kuò)展:機(jī)器不夠加機(jī)器,理論上無(wú)限擴(kuò)展
##########################################################??
二、元數(shù)據(jù)記錄的功能
問(wèn)題:
??? ??? ?文件分布在不同機(jī)器上不利于尋找
解決:
??? ??? ?元數(shù)據(jù)記錄下文件及其存儲(chǔ)位置信息,快速定位文件位置
?
##########################################################??
?
三、分塊存儲(chǔ)好處
問(wèn)題:
??? ??? ?文件過(guò)大導(dǎo)致單機(jī)存不下,上傳下載效率低
解決:
??? ??? ?文件分塊存儲(chǔ)在不同機(jī)器,針對(duì)塊并行操作提高效率
?##########################################################?
四、副本機(jī)制的作用
問(wèn)題:
??? ??? ?硬件故障難以避免,數(shù)據(jù)易丟失
解決:
??? ??? ?不同機(jī)器設(shè)置備份,冗余存儲(chǔ),保障數(shù)據(jù)安全
?##########################################################?
4、HDFS簡(jiǎn)介
HDFS(Hadoop Distributed File System),意為:Hadoop分布式文件系統(tǒng)。
是Apache Hadoop核心組件之一,作為大數(shù)據(jù)生態(tài)圈最底層的分布式存儲(chǔ)服務(wù)而存在,也可以說(shuō)大數(shù)據(jù)首先要解決的問(wèn)題就是海量數(shù)據(jù)的存儲(chǔ)問(wèn)題。
?
HDFS主要是解決大數(shù)據(jù)如何存儲(chǔ)問(wèn)題的,分布式意味著HDFS是橫跨多臺(tái)計(jì)算機(jī)上的存儲(chǔ)系統(tǒng)
HDFS是一種能夠在普通硬件上運(yùn)行的分布式文件系統(tǒng),它是高度容錯(cuò)的,適應(yīng)于具有大數(shù)據(jù)集的應(yīng)用程序,它非常適于存儲(chǔ)大型數(shù)據(jù)(例如TB和PB)。
HDFS使用多臺(tái)計(jì)算機(jī)存儲(chǔ)文件,并且提供同一的訪問(wèn)接口,像是訪問(wèn)一個(gè)普通文件系統(tǒng)一樣使用分布式文件系統(tǒng)。
?
HDFS適用場(chǎng)景
##########################################################??
5、HDFS主從架構(gòu)
HDFS集群是標(biāo)準(zhǔn)的master/slave主從架構(gòu)集群
一般一個(gè)HDFS集群是有一個(gè)Namenode和一定數(shù)目的Datanode組成
Namenode是HDSF主節(jié)點(diǎn),Datanode是HDFS從節(jié)點(diǎn),兩種角色各司其職,共同協(xié)調(diào)完成分布式的文件存儲(chǔ)服務(wù)
官方架構(gòu)圖中是一主五從模式,其中五個(gè)從角色位于兩個(gè)機(jī)架(RACK)的不同服務(wù)器上面。
?
分塊存儲(chǔ)
HDFS中的文件在物理上是分塊存儲(chǔ)的,默認(rèn)大小是128M,不足128M則本身就是一塊
塊的大小可以通過(guò)配置參數(shù)來(lái)規(guī)定,參數(shù)位于hdfs-default.xml中:dfs.blocksize
副本機(jī)制
文件的所有block都會(huì)有副本,副本系數(shù)可以在文件創(chuàng)建的時(shí)候指定,也可以在之后通過(guò)命令改變
副本數(shù)由參數(shù)dfs.replication控制,默認(rèn)值是3,也就是會(huì)額外再?gòu)?fù)制2份,連同本身總共3份副本
元數(shù)據(jù)管理
在HDFS中,Namenode管理的元數(shù)據(jù)具有兩種類型。
文件自身屬性信息
??? ??? ?文件名稱,權(quán)限,修改時(shí)間,文件大小,復(fù)制因子,數(shù)據(jù)塊大小。
文件塊位置映射信息
??? ??? ?記錄文件塊和Datanode之間的映射信息,即哪個(gè)塊位于哪個(gè)節(jié)點(diǎn)上。
數(shù)據(jù)塊存儲(chǔ)
文件的各個(gè)block的具體存儲(chǔ)管理由DataNode節(jié)點(diǎn)管理
每一個(gè)block都可以在多個(gè)DataNode上存儲(chǔ)
##########################################################??
6、HDFS shell操作
介紹:
??? ??? ?命令行界面,是指用戶通過(guò)鍵盤(pán)輸入指令,計(jì)算機(jī)接收到指令后,予以執(zhí)行一種人際交互方式
??? ??? ?Hadoop提供了文件系統(tǒng)的shell命令行客戶端:hadoop fs [options]
[hadoop@node1 mapreduce]$ hadoop fs
Usage: hadoop fs [generic options]
[-appendToFile <localsrc> ... <dst>]
[-cat [-ignoreCrc] <src> ...]
[-checksum [-v] <src> ...]
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-copyFromLocal [-f] [-p] [-l] [-d] [-t <thread count>] <localsrc> ... <dst>]
[-copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] [-e] <path> ...]
[-cp [-f] [-p | -p[topax]] [-d] <src> ... <dst>]
[-createSnapshot <snapshotDir> [<snapshotName>]]
[-deleteSnapshot <snapshotDir> <snapshotName>]
[-df [-h] [<path> ...]]
[-du [-s] [-h] [-v] [-x] <path> ...]
[-expunge [-immediate] [-fs <path>]]
[hadoop@node1 local]$ hadoop fs -ls /
[hadoop@node1 local]$ hadoop fs -mkdir /test
[hadoop@node1 local]$ hadoop fs -ls /
Found 1 items
drwxr-xr-x - hadoop supergroup 0 2023-03-28 14:03 /test
HDFS Shell CLI 支持多種文件系統(tǒng),包括本地文件系統(tǒng)(file:///),分布式文件系統(tǒng)(hdfs://)
? 具體操作的是什么文件系統(tǒng)取決于命令中文件路徑URL中的前綴協(xié)議。
? 如果沒(méi)有指定前綴,則將會(huì)讀取環(huán)境變量中的fs.defaultFS屬性,以該屬性值作為默認(rèn)文件系統(tǒng)。
hadoop dfs 只能操作HDFS文件系統(tǒng)(包括與Local FS間的操作),不過(guò)已經(jīng)Deprecated;
hdfs dfs 只能操作HDFS文件系統(tǒng)相關(guān)(包括與Local FS間的操作),常用;
hadoop fs 可操作任意文件系統(tǒng),不僅僅是hdfs文件系統(tǒng),使用范圍更廣;
目前版本來(lái)看,官方最終推薦使用的是hadoop fs。當(dāng)然hdfs dfs在市面上的使用也比較多。
常用操作:
hadoop fs -mkdir [-p] <path> ...
path 為待創(chuàng)建的目錄
-p選項(xiàng)的行為與Unix mkdir -p非常相似,它會(huì)沿著路徑創(chuàng)建父目錄
hadoop fs -ls [-h] [-R] [<path> ...]
path 指定目錄路徑
-h 人性化顯示文件size
-R 遞歸查看指定目錄及其子目錄
hadoop fs -put [-f] [-p] <localsrc> ... <dst>
-f 覆蓋目標(biāo)文件(已存在下)
-p 保留訪問(wèn)和修改時(shí)間,所有權(quán)和權(quán)限。
localsrc 本地文件系統(tǒng)(客戶端所在機(jī)器)
dst 目標(biāo)文件系統(tǒng)(HDFS)
hadoop fs -cat <src> ...
讀取指定文件全部?jī)?nèi)容,顯示在標(biāo)準(zhǔn)輸出控制臺(tái)。
注意:對(duì)于大文件內(nèi)容讀取,慎重。
hadoop fs -get [-f] [-p] <src> ... <localdst>
下載文件到本地文件系統(tǒng)指定目錄,localdst必須是目錄
-f 覆蓋目標(biāo)文件(已存在下)
-p 保留訪問(wèn)和修改時(shí)間,所有權(quán)和權(quán)限。
hadoop fs -cp [-f] <src> ... <dst>
-f 覆蓋目標(biāo)文件(已存在下)
hadoop fs -mv <src> ... <dst>
移動(dòng)文件到指定文件夾下
可以使用該命令移動(dòng)數(shù)據(jù),重命名文件的名稱
##########################################################??
7、HDFS工作流程與機(jī)制
主角色:NameNode
NameNode是Hadoop分布式文件系統(tǒng)的核心,架構(gòu)中的主角色
NameNode維護(hù)和管理文件系統(tǒng)元數(shù)據(jù),包括名稱空間目錄樹(shù)結(jié)構(gòu),文件和塊的位置信息,訪問(wèn)權(quán)限等信息
基于此,NameNode成為了訪問(wèn)HDFS的唯一入口
NameNode內(nèi)部通過(guò)內(nèi)存和磁盤(pán)文件兩種方式管理元數(shù)據(jù)。
其中磁盤(pán)上的元數(shù)據(jù)文件包括Fsimage內(nèi)存元數(shù)據(jù)鏡像文件和edits log(Journal)編輯日志。
namenode職責(zé):
NameNode僅存儲(chǔ)HDFS的元數(shù)據(jù):文件系統(tǒng)中的所有文件的目錄樹(shù),并跟蹤整個(gè)集群中的文件,不存儲(chǔ)實(shí)際數(shù)據(jù)
NameNode知道HDFS中任何給定文件的塊列表及其位置,使用此信息NameNode知道如何從塊中構(gòu)建文件
NameNode不持久化存儲(chǔ)每個(gè)文件中各個(gè)塊所在的datanode的位置信息,這些信息會(huì)在系統(tǒng)啟動(dòng)時(shí)從DataNode重建
NameNode是Hadoop集群中的單點(diǎn)故障
NameNode所在及其通常會(huì)配置由大量?jī)?nèi)存(RAM)
從角色:datanode
DataNode是Hadoop HDFS中的從角色,負(fù)責(zé)具體的數(shù)據(jù)塊存儲(chǔ)
DataNode的數(shù)量決定了HDFS集群的整體數(shù)據(jù)存儲(chǔ)能力,通過(guò)和NameNode配合維護(hù)這數(shù)據(jù)塊
datanode職責(zé)
DataNode負(fù)責(zé)最終數(shù)據(jù)塊block的存儲(chǔ),是集群的從角色,也稱為Slave
DataNode啟動(dòng)時(shí),會(huì)將自己注冊(cè)到NameNode并匯報(bào)自己負(fù)責(zé)持有的塊列表
當(dāng)某個(gè)DataNode關(guān)閉時(shí)不會(huì)影響數(shù)據(jù)的可用性,NameNode將安排由其他DataNode管理的塊進(jìn)行副本復(fù)制
DataNode所在機(jī)器通常配置有大量的硬盤(pán)空間,因?yàn)閷?shí)際數(shù)據(jù)存儲(chǔ)在DataNode中。
主角色輔助角色:secondarynamenode
SecondaryNameNode充當(dāng)著NameNode的輔助節(jié)點(diǎn),但不能替代NameNode
主要是幫助主角色進(jìn)行元數(shù)據(jù)文件的合并動(dòng)作,可以理解為主角色的秘書(shū)?
##########################################################?
8、HDFS讀寫(xiě)數(shù)據(jù)的過(guò)程??????
核心概念--Pipeline管道
Pipeline,中文翻譯為管道,這是HDFS在上傳文件寫(xiě)數(shù)據(jù)過(guò)程中采用的一種數(shù)據(jù)傳輸方式
客戶端將數(shù)據(jù)塊寫(xiě)入第一個(gè)數(shù)據(jù)節(jié)點(diǎn),第一個(gè)數(shù)據(jù)節(jié)點(diǎn)保存數(shù)據(jù)之后再講塊復(fù)制到第二個(gè)數(shù)據(jù)節(jié)點(diǎn),后者保存后再將其復(fù)制到第三個(gè)數(shù)據(jù)節(jié)點(diǎn)
為什么datanode之間采用pipeline線性傳輸,而不是一次給三個(gè)datanode拓?fù)涫絺鬏斈兀?/strong>
因?yàn)閿?shù)據(jù)以管道的方式,順序的沿著一個(gè)方向傳輸,這樣能夠充分利用每個(gè)機(jī)器的帶寬,避免網(wǎng)絡(luò)瓶頸和高延遲時(shí)的連接,最小化推送所有數(shù)據(jù)的延時(shí)
在線性推送模式下,每臺(tái)機(jī)器的所有出口寬帶都用于最快的速度傳輸數(shù)據(jù),而不是在多個(gè)接受者之間分配寬帶
核心概念--ACK應(yīng)答響應(yīng)
ACK(Acknowledgs character)即是確認(rèn)字符,在數(shù)據(jù)通信中,接收方發(fā)送給發(fā)送方的一種傳輸控制字符,表示發(fā)來(lái)的數(shù)據(jù)已經(jīng)確認(rèn)接收無(wú)誤
在HDFS pipeline管道傳輸數(shù)據(jù)的過(guò)程中,傳輸?shù)姆捶较驎?huì)進(jìn)行ACK校驗(yàn),確保數(shù)據(jù)傳輸安全
默認(rèn)3個(gè)副本存儲(chǔ)策略:
第一塊副本:優(yōu)先客戶端本地,否則隨機(jī)。
第二塊副本:不同于第一塊副本的不同機(jī)架。
第三塊副本:第二塊副本相同機(jī)架不同機(jī)器。
寫(xiě)操作的整個(gè)過(guò)程:
1、HDFS客戶端創(chuàng)建對(duì)象實(shí)例DistributedFileSystem, 該對(duì)象中封裝了與HDFS文件系統(tǒng)操作的相關(guān)方法。
2、調(diào)用DistributedFileSystem對(duì)象的create()方法,通過(guò)RPC請(qǐng)求NameNode創(chuàng)建文件。
NameNode執(zhí)行各種檢查判斷:目標(biāo)文件是否存在、父目錄是否存在、客戶端是否具有創(chuàng)建該文件的權(quán)限。檢查通過(guò)
,NameNode就會(huì)為本次請(qǐng)求記下一條記錄,返回FSDataOutputStream輸出流對(duì)象給客戶端用于寫(xiě)數(shù)據(jù)。3、客戶端通過(guò)FSDataOutputStream輸出流開(kāi)始寫(xiě)入數(shù)據(jù)。
4、客戶端寫(xiě)入數(shù)據(jù)時(shí),將數(shù)據(jù)分成一個(gè)個(gè)數(shù)據(jù)包(packet 默認(rèn)64k), 內(nèi)部組件DataStreamer請(qǐng)求NameNode挑
選出適合存儲(chǔ)數(shù)據(jù)副本的一組DataNode地址,默認(rèn)是3副本存儲(chǔ)。
DataStreamer將數(shù)據(jù)包流式傳輸?shù)絧ipeline的第一個(gè)DataNode,該DataNode存儲(chǔ)數(shù)據(jù)包并將它發(fā)送到pipeline的第
二個(gè)DataNode。同樣,第二個(gè)DataNode存儲(chǔ)數(shù)據(jù)包并且發(fā)送給第三個(gè)(也是最后一個(gè))DataNode。5、傳輸?shù)姆捶较蛏?,?huì)通過(guò)ACK機(jī)制校驗(yàn)數(shù)據(jù)包傳輸是否成功;
6、客戶端完成數(shù)據(jù)寫(xiě)入后,在FSDataOutputStream輸出流上調(diào)用close()方法關(guān)閉。
7、DistributedFileSystem聯(lián)系NameNode告知其文件寫(xiě)入完成,等待NameNode確認(rèn)。
因?yàn)閚amenode已經(jīng)知道文件由哪些塊組成(DataStream請(qǐng)求分配數(shù)據(jù)塊),因此僅需等待最小復(fù)制塊即可成功返回
最小復(fù)制是由參數(shù)dfs.namenode.replication.min指定,默認(rèn)是1.
##########################################################??
讀操作的整個(gè)過(guò)程:
讀操作的整個(gè)過(guò)程:
1、HDFS客戶端創(chuàng)建對(duì)象實(shí)例DistributedFileSystem, 調(diào)用該對(duì)象的open()方法來(lái)打開(kāi)希望讀取的文件。
2、DistributedFileSystem使用RPC調(diào)用namenode來(lái)確定**文件中前幾個(gè)塊的塊位置(分批次讀?。┬畔?*。
對(duì)于每個(gè)塊,namenode返回具有該塊所有副本的datanode位置地址列表,并且該地址列表是排序好的,與客戶端的網(wǎng)絡(luò)拓?fù)渚嚯x近的排序靠前。
3、DistributedFileSystem將FSDataInputStream輸入流返回到客戶端以供其讀取數(shù)據(jù)。
4、客戶端在FSDataInputStream輸入流上調(diào)用read()方法。然后,已存儲(chǔ)DataNode地址的InputStream連接到文件
中第一個(gè)塊的最近的DataNode。數(shù)據(jù)從DataNode流回客戶端,結(jié)果客戶端可以在流上重復(fù)調(diào)用read()。
5、當(dāng)該塊結(jié)束時(shí),F(xiàn)SDataInputStream將關(guān)閉與DataNode的連接,然后尋找下一個(gè)block塊的最佳datanode位置。這些操作對(duì)用戶來(lái)說(shuō)是透明的。所以用戶感覺(jué)起來(lái)它一直在讀取一個(gè)連續(xù)的流。
客戶端從流中讀取數(shù)據(jù)時(shí),也會(huì)根據(jù)需要詢問(wèn)NameNode來(lái)檢索下一批數(shù)據(jù)塊的DataNode位置信息。
6、一旦客戶端完成讀取,就對(duì)FSDataInputStream調(diào)用close()方法。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-400493.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-400493.html
到了這里,關(guān)于Hadoop - HDFS文件系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!