工做機制的學習主要是爲加深對分佈式系統的理解,以及加強遇到各類問題時的分析解決能力,造成必定的集羣運維能力。node
不少不是真正理解hadoop技術體系的人會經常以爲HDFS可用於網盤類應用,但實際並不是如此。要想將技術準確用在恰當的地方,必須對技術有深入的理解。緩存
NAMENODE職責服務器
負責客戶端請求的響應網絡
元數據的管理(查詢,修改)app
元數據管理
namenode對數據的管理採用了三種存儲形式:運維
內存元數據(NameSystem)socket
磁盤元數據鏡像文件分佈式
數據操做日誌文件(可經過日誌運算出元數據)工具
元數據存儲機制oop
A、內存中有一份完整的元數據(內存meta data)
B、磁盤有一個「準完整」的元數據鏡像(fsimage)文件(在namenode的工做目錄中)
C、用於銜接內存metadata和持久化元數據鏡像fsimage之間的操做日誌(edits文件)
注:當客戶端對hdfs中的文件進行新增或者修改操做,操做記錄首先被記入edits日誌文件中,當客戶端操做成功後,相應的元數據會更新到內存meta.data中
元數據手動查看
能夠經過hdfs的一個工具來查看edits中的信息bin/hdfs oev -i edits -o edits.xml
bin/hdfs oiv -i fsimage_0000000000000000087 -p XML -o fsimage.xml
元數據的checkpoint
每隔一段時間,會由secondary namenode將namenode上積累的全部edits和一個最新的fsimage下載到本地,並加載到內存進行merge(這個過程稱爲checkpoint)
checkpoint的詳細過程
checkpoint操做的觸發條件配置參數
dfs.namenode.checkpoint.check.period=60 #檢查觸發條件是否知足的頻率,60秒
dfs.namenode.checkpoint.dir=file://${hadoop.tmp.dir}/dfs/namesecondary
dfs.namenode.checkpoint.edits.dir=${dfs.namenode.checkpoint.dir} #以上兩個參數作checkpoint操做時,secondary namenode的本地工做目錄
dfs.namenode.checkpoint.max-retries=3 #最大重試次數
dfs.namenode.checkpoint.period=3600 #兩次checkpoint之間的時間間隔3600秒
dfs.namenode.checkpoint.txns=1000000 #兩次checkpoint之間最大的操做記錄
checkpoint的附帶做用
namenode和secondary namenode的工做目錄存儲結構徹底相同,因此,當namenode故障退出須要從新恢復時,能夠從secondary namenode的工做目錄中將fsimage拷貝到namenode的工做目錄,以恢復namenode的元數據
概述
Datanode工做職責:
一、存儲管理用戶的文件塊數據
二、按期向namenode彙報自身所持有的block信息(經過心跳信息上報)(這點很重要,由於,當集羣中發生某些block副本失效時,集羣如何恢復block初始副本數量的問題)
<property> <name>dfs.blockreport.intervalMsec</name> <value>3600000</value> <description>Determines block reporting interval in milliseconds. </description> </property>
Datanode掉線判斷時限參數
datanode進程死亡或者網絡故障形成datanode沒法與namenode通訊,namenode不會當即把該節點斷定爲死亡,要通過一段時間,這段時間暫稱做超時時長。HDFS默認的超時時長爲10分鐘+30秒。若是定義超時時間爲timeout,則超時時長的計算公式爲:timeout = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval
而默認的heartbeat.recheck.interval 大小爲5分鐘,dfs.heartbeat.interval默認爲3秒。
須要注意的是hdfs-site.xml 配置文件中的heartbeat.recheck.interval的單位爲毫秒,dfs.heartbeat.interval的單位爲秒。因此,舉個例子,若是heartbeat.recheck.interval設置爲5000(毫秒),dfs.heartbeat.interval設置爲3(秒,默認),則總的超時時間爲40秒。
<property> <name>heartbeat.recheck.interval</name> <value>2000</value> </property> <property> <name>dfs.heartbeat.interval</name> <value>1</value> </property>
觀察驗證DATANODE功能
上傳一個文件,觀察文件的block具體的物理存放狀況:
在每一臺datanode機器上的這個目錄中能找到文件的切塊:
/home/hadoop/app/hadoop-2.7.3/tmp/dfs/data/current/BP-193442119-192.168.88.3-1432458743457/current/finalized
轉自簡書:https://www.jianshu.com/p/855dff19fd66