一、基本概念
1、HDFS介紹
HDFS是Hadoop Distribute File System(分布式文件系統(tǒng))的簡稱。是Hadoop核心組件之一,作為最底層的分布式存儲服務(wù)而存在。
解決問題:大數(shù)據(jù)存儲。是橫跨在多臺計算機(jī)上的存儲系統(tǒng)。分布式文件系統(tǒng)為存儲和處理超大規(guī)模數(shù)據(jù)提供所需的擴(kuò)展能力。
傳統(tǒng)存儲模式到HDFS的歷程:
1)傳統(tǒng)存儲,上傳/下載耗時;
2)傳統(tǒng)存儲遇到存儲瓶頸時,縱向擴(kuò)展加磁盤加內(nèi)存,但始終有上限;
3)繼而進(jìn)行橫向擴(kuò)展,增加服務(wù)器。對文件分割成更小的塊,每個塊放到不同的服務(wù)器進(jìn)行分布式存儲(datanode)。這解決了上傳的問題,但是讀取文件成本變高。所以需要一個記錄文件切割及保存在哪里的相關(guān)信息(namenode);
4)且如果其中一個宕機(jī)掛掉了,那么就無法讀取。為了解決單點故障,可以把文件進(jìn)行備份存儲(snn)。
datanode,存放數(shù)據(jù)的
namenode,記錄數(shù)據(jù)的位置
snn,數(shù)據(jù)備份
整個集群加起來就是HDFS
2、HDFS設(shè)計目標(biāo)
1、硬件故障時常態(tài)。故障的檢測和自動快速恢復(fù);
2、HDFS被設(shè)計成時候批量處理,而不是用戶交互式的。注重數(shù)據(jù)訪問的高吞吐量;
3、支持大文件,GB到TB級別;
4、write-one-red-many,一次寫入多次讀取;
5、移動計算的代價比移動數(shù)據(jù)的代價低;
6、在異構(gòu)的硬件和軟件平臺上的可移植性。
二、HDFS重要特性
首先它是一個文件系統(tǒng),用于存儲文件,通過統(tǒng)一的命名空間目錄樹來定位文件。其次它是分布式的,有很多服務(wù)器聯(lián)合起來實現(xiàn)其功能,集群中的服務(wù)器有各自的角色,
1、master/slave架構(gòu)(主從架構(gòu))
一般HDFS集群是有一個namenode和一定數(shù)量的DataNode組成,NameNode是集群主節(jié)點,DataNode是集群從節(jié)點。2種角色各司其事,協(xié)調(diào)完成分布式文件存儲服務(wù)。
2、分塊存儲
HDFS的文件在物理上是分塊存儲的。塊的大小通過配置參數(shù)來決定。默認(rèn)是128M(Hadoop2.x版本)。
3、名字空間(NameSpace)
HDFS支持傳統(tǒng)的層次型文件組織結(jié)構(gòu)。NameNode負(fù)責(zé)維護(hù)文件系統(tǒng)的名字空間。任何文件系統(tǒng)名字空間或?qū)傩缘男薷亩紝⒈籲amenode記錄下來。HDFS會給客戶端提供一個統(tǒng)一抽象目錄樹,客戶端通過路徑來訪問文件,例如:hdfs://namede:port/dir-a/dir-b/dir-c/file.data。
4、Namenode元數(shù)據(jù)管理
元數(shù)據(jù):目錄機(jī)構(gòu)及文件分塊位置信息叫元數(shù)據(jù)。namenode負(fù)責(zé)維護(hù)整個HDFS文件系統(tǒng)的目錄樹結(jié)構(gòu),以及每個文件對于的block快信息(block的id,所做的DataNode服務(wù)器)
5、DataNode數(shù)據(jù)存儲
文件的各個block具體存儲管理有DataNode節(jié)點承擔(dān)。每個block都可以在多個DataNode上。DataNode需要定時想namenode匯報自己持有的block信息。存儲多個副本(副本數(shù)量也可以通過參數(shù)設(shè)置dfs.replication,默認(rèn)是3)。注意:常說的副本個數(shù)一般要連同自己本身
6、副本機(jī)制
為了容錯,文件的所有block都會有副本。每個文件的block大小和副本系數(shù)都是可配置的。應(yīng)用程序可以指定某個文件的副本數(shù)據(jù)。副本系統(tǒng)可以在文件創(chuàng)建的時候指定,也可以在之后改變。
7、一次寫入,多次讀出
HDF不支持文件的修改。正因為如此,HDFS適合用來做大數(shù)據(jù)分析的底層存儲服務(wù),并不適用來做網(wǎng)盤等。因為修改不方便,延遲大,網(wǎng)絡(luò)開銷大,成本太高。
三、HDFS基本操作
1、Shell命令行客戶端
hadoop fs <args>
文件系統(tǒng)shell包括與Hadoop已經(jīng)Hadoop支持的其他系統(tǒng)(如本地FS,HFTP FS,S3 FS等)直接交互的各類類似shell的命令。
四、HDFS基本原理
1、NameNode
1)是HDFS的核心
2)又稱為Master
3)NameNode僅存儲HDFS的元數(shù)據(jù):文件系統(tǒng)中所有文件的目錄樹,并跟蹤給整個集群中的文件
4)NameNode不存儲實際數(shù)據(jù)或數(shù)據(jù)集。數(shù)據(jù)本身實際存儲在DataNodes中。
5)namenode知道HDFS中任何給定的文件的塊列表及其位置。使用此信息namenode知道如何從塊中構(gòu)建文件。(如果不知道,那么存儲服務(wù)就是失敗的)
6)為了提高響應(yīng)效率。元數(shù)據(jù)保存在內(nèi)存當(dāng)中,對元數(shù)據(jù)做定時備份。NameNode并不會持久化存儲每個文件中各個塊所在的DataNode位置(不會保存在日志當(dāng)中,也不會保存在鏡像當(dāng)中,只會在內(nèi)存元素中有),這些信息會在系統(tǒng)啟動時草趕時間節(jié)點重建。
7)NameNode對于HDFS至關(guān)重要,當(dāng)NameNode關(guān)閉時,HDFS/Hadoop集群無法訪問。
8)NameNode是Hadoop集群中的單點故障。單獨故障:它如果出了問題,其他不可以用。
9)NameNode所在集群通常會配置大量內(nèi)存(RAM)
2、DataNode
1)DataNode負(fù)責(zé)將實際數(shù)據(jù)存儲在HDFS中。
2)DataNode也稱為slave。
3)DataNode和NameNode
4)DataNode啟動時,它將腹部自己到namenode,并匯報自己負(fù)責(zé)持有的塊列表。
5)當(dāng)某個DataNode關(guān)閉時,不加影響數(shù)據(jù)或集群可用性。DataNode將安排其他DataNode管理的塊進(jìn)行副本復(fù)制。
6)DataNode所在機(jī)器通常配置大量硬盤空間。因為實際數(shù)據(jù)存儲在DataNode中。
7)DataNode會定金(dfs.heartbeat.interval配置項配置,默認(rèn)3s)想namenode發(fā)送心跳,如果namenode長時間沒收到心跳,namenode就會認(rèn)為該DataNode失效。
8)block匯報持有塊,匯報時間間隔取參數(shù)dfs,blockreport.intervaIMsec,默認(rèn)6小時
五、HDFS工作機(jī)制
NameNode(1個)負(fù)責(zé)整個文件系統(tǒng)元數(shù)據(jù);DataNode(可能多個)負(fù)責(zé)管理具體文件數(shù)據(jù)塊存儲;Secondary NameNode(理解為秘書)協(xié)助NameNode進(jìn)行元數(shù)據(jù)備份。
HDFS的內(nèi)容部工作機(jī)制對客戶端保持透明,客戶端請求訪問HDFS都是通過向namenode申請來進(jìn)行。
六、HDFS數(shù)據(jù)流程
七、案例:Shell定時采集數(shù)據(jù)至HDFS
????一般日志文件生成的邏輯有業(yè)務(wù)系統(tǒng)決定,比如每小時滾動一次,或者一定大小滾動一次,避免單個日志文件多大不方便操作。
????比如滾動后的文件命名為access.log.x,其中x為數(shù)字。正在進(jìn)行寫的日志文件叫access.log。這樣的話,如果日志文件后綴有數(shù)字的,就滿足上傳條件,就把這些文件移動到準(zhǔn)備上傳的工作區(qū)間目錄(比如叫toupoad)。工作區(qū)間有文件夾之后,可以試用Hadoop put命名將文件上傳。