目錄
- HDFS的工作機(jī)制
- 概述
- HDFS 寫數(shù)據(jù)流程
- HDFS 讀數(shù)據(jù)流程
- NameNode的工作機(jī)制
- NameNode的職責(zé)
- 元數(shù)據(jù)的管理
- DataNode的工作機(jī)制
- 概述
- 觀察驗(yàn)證DataNode 功能
HDFS的工作機(jī)制
工作機(jī)制的學(xué)習(xí)主要是為加深對分布式系統(tǒng)的理解际乘,以及增強(qiáng)遇到各種問題時的分析解決能力住拭,形成一定的集群運(yùn)維能力遇八。
很多不是真正理解hadoop技術(shù)體系的人會常常覺得HDFS可用于網(wǎng)盤類應(yīng)用侵蒙,但實(shí)際并非如此撇贺。要想將技術(shù)準(zhǔn)確用在恰當(dāng)?shù)牡胤教酥仨殞夹g(shù)有深刻的理解兵迅。
概述
- 1.HDFS集群分為兩大角色:NameNode抢韭、DataNode
- 2.NameNode負(fù)責(zé)管理整個文件系統(tǒng)的元數(shù)據(jù)(元數(shù)據(jù)就是文件數(shù)據(jù)塊放置在DataNode位置和數(shù)量等信息)
- 3.DataNode 負(fù)責(zé)管理用戶的文件數(shù)據(jù)塊
- 4.文件會按照固定的大小(blocksize)切成若干塊后分布式存儲在若干臺datanode上
- 5.每一個文件塊可以有多個副本恍箭,并存放在不同的datanode上
- 6.Datanode會定期向Namenode匯報自身所保存的文件block信息刻恭,而namenode則會負(fù)責(zé)保持文件的副本數(shù)量
- 7.HDFS的內(nèi)部工作機(jī)制對客戶端保持透明,客戶端請求訪問HDFS都是通過向namenode申請來進(jìn)行
HDFS 寫數(shù)據(jù)流程
- 概述
客戶端要向HDFS寫數(shù)據(jù),首先要跟Namenode通信以確認(rèn)可以寫文件并獲得接收文件block的Datanode鳍贾,然后鞍匾,客戶端按順序?qū)⑽募饌€block傳遞給相應(yīng)Datanode,并由接收到block的Datanode負(fù)責(zé)向其他Datanode復(fù)制block的副本
- 寫數(shù)據(jù)步驟詳解
1骑科、Client向Namenode通信請求上傳文件橡淑,Namenode檢查目標(biāo)文件是否已存在,父目錄是否存在
2咆爽、Namenode返回是否可以上傳
3梁棠、Client請求第一個 block該傳輸?shù)侥男〥atanode服務(wù)器上
4、Namenode返回3個Datanode服務(wù)器ABC
5斗埂、Client請求3臺DataNode中的一臺A上傳數(shù)據(jù)(本質(zhì)上是一個RPC調(diào)用符糊,建立pipeline),A收到請求會繼續(xù)調(diào)用B呛凶,然后B調(diào)用C男娄,將真?zhèn)€pipeline建立完成,逐級返回客戶端
6把兔、Client開始往A上傳第一個block(先從磁盤讀取數(shù)據(jù)放到一個本地內(nèi)存緩存)沪伙,以packet為單位,A收到一個packet就會傳給B县好,B傳給C围橡;A每傳一個packet會放入一個應(yīng)答隊列等待應(yīng)答
7、當(dāng)一個block傳輸完成之后缕贡,Client再次請求Namenode上傳第二個block的服務(wù)器翁授。
HDFS 讀數(shù)據(jù)流程
- 概述
客戶端將要讀取的文件路徑發(fā)送給namenode,namenode獲取文件的元信息(主要是block的存放位置信息)返回給客戶端晾咪,客戶端根據(jù)返回的信息找到相應(yīng)datanode逐個獲取文件的block并在客戶端本地進(jìn)行數(shù)據(jù)追加合并從而獲得整個文件
- 讀數(shù)據(jù)步驟詳解
1收擦、跟namenode通信查詢元數(shù)據(jù),找到文件塊所在的datanode服務(wù)器
2谍倦、挑選一臺datanode(就近原則塞赂,然后隨機(jī))服務(wù)器,請求建立socket流
3昼蛀、datanode開始發(fā)送數(shù)據(jù)(從磁盤里面讀取數(shù)據(jù)放入流宴猾,以packet為單位來做校驗(yàn))
4、客戶端以packet為單位接收叼旋,現(xiàn)在本地緩存仇哆,然后寫入目標(biāo)文件
NAMENODE工作機(jī)制
NAMENODE職責(zé)
負(fù)責(zé)客戶端請求的響應(yīng)
元數(shù)據(jù)的管理(查詢,修改)
元數(shù)據(jù)管理
namenode對數(shù)據(jù)的管理采用了三種存儲形式:內(nèi)存元數(shù)據(jù)(NameSystem)
磁盤元數(shù)據(jù)鏡像文件
數(shù)據(jù)操作日志文件(可通過日志運(yùn)算出元數(shù)據(jù))
元數(shù)據(jù)存儲機(jī)制
A夫植、內(nèi)存中有一份完整的元數(shù)據(jù)(內(nèi)存meta data)
B讹剔、磁盤有一個“準(zhǔn)完整”的元數(shù)據(jù)鏡像(fsimage)文件(在namenode的工作目錄中)
-
C、用于銜接內(nèi)存metadata和持久化元數(shù)據(jù)鏡像fsimage之間的操作日志(edits文件)
注:當(dāng)客戶端對hdfs中的文件進(jìn)行新增或者修改操作,操作記錄首先被記入edits日志文件中延欠,當(dāng)客戶端操作成功后陌兑,相應(yīng)的元數(shù)據(jù)會更新到內(nèi)存meta.data中
元數(shù)據(jù)手動查看
可以通過hdfs的一個工具來查看edits中的信息
bin/hdfs oev -i edits -o edits.xml
bin/hdfs oiv -i fsimage_0000000000000000087 -p XML -o fsimage.xml
元數(shù)據(jù)的checkpoint
每隔一段時間,會由secondary namenode將namenode上積累的所有edits和一個最新的fsimage下載到本地由捎,并加載到內(nèi)存進(jìn)行merge(這個過程稱為checkpoint)checkpoint的詳細(xì)過程
checkpoint操作的觸發(fā)條件配置參數(shù)
dfs.namenode.checkpoint.check.period=60 #檢查觸發(fā)條件是否滿足的頻率诀紊,60秒
dfs.namenode.checkpoint.dir=file://${hadoop.tmp.dir}/dfs/namesecondary
dfs.namenode.checkpoint.edits.dir=${dfs.namenode.checkpoint.dir} #以上兩個參數(shù)做checkpoint操作時,secondary namenode的本地工作目錄
dfs.namenode.checkpoint.max-retries=3 #最大重試次數(shù)
dfs.namenode.checkpoint.period=3600 #兩次checkpoint之間的時間間隔3600秒
dfs.namenode.checkpoint.txns=1000000 #兩次checkpoint之間最大的操作記錄checkpoint的附帶作用
namenode和secondary namenode的工作目錄存儲結(jié)構(gòu)完全相同隅俘,所以邻奠,當(dāng)namenode故障退出需要重新恢復(fù)時,可以從secondary namenode的工作目錄中將fsimage拷貝到namenode的工作目錄为居,以恢復(fù)namenode的元數(shù)據(jù)
DATANODE的工作機(jī)制
概述
-
Datanode工作職責(zé):
1碌宴、存儲管理用戶的文件塊數(shù)據(jù)
2、定期向namenode匯報自身所持有的block信息(通過心跳信息上報)(這點(diǎn)很重要蒙畴,因?yàn)榉×停?dāng)集群中發(fā)生某些block副本失效時,集群如何恢復(fù)block初始副本數(shù)量的問題)<property> <name>dfs.blockreport.intervalMsec</name> <value>3600000</value> <description>Determines block reporting interval in milliseconds. </description> </property>
-
Datanode掉線判斷時限參數(shù)
datanode進(jìn)程死亡或者網(wǎng)絡(luò)故障造成datanode無法與namenode通信膳凝,namenode不會立即把該節(jié)點(diǎn)判定為死亡碑隆,要經(jīng)過一段時間,這段時間暫稱作超時時長蹬音。HDFS默認(rèn)的超時時長為10分鐘+30秒上煤。如果定義超時時間為timeout,則超時時長的計算公式為:
timeout = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval
而默認(rèn)的heartbeat.recheck.interval 大小為5分鐘著淆,dfs.heartbeat.interval默認(rèn)為3秒劫狠。
需要注意的是hdfs-site.xml 配置文件中的heartbeat.recheck.interval的單位為毫秒,dfs.heartbeat.interval的單位為秒永部。所以独泞,舉個例子,如果heartbeat.recheck.interval設(shè)置為5000(毫秒)苔埋,dfs.heartbeat.interval設(shè)置為3(秒懦砂,默認(rèn)),則總的超時時間為40秒组橄。<property> <name>heartbeat.recheck.interval</name> <value>2000</value> </property> <property> <name>dfs.heartbeat.interval</name> <value>1</value> </property>
觀察驗(yàn)證DATANODE功能
上傳一個文件荞膘,觀察文件的block具體的物理存放情況:
在每一臺datanode機(jī)器上的這個目錄中能找到文件的切塊:
/home/hadoop/app/hadoop-2.7.3/tmp/dfs/data/current/BP-193442119-192.168.88.3-1432458743457/current/finalized
待續(xù)...