1、 HDFS 中的 block 默認(rèn)保存幾份?
默認(rèn)保存3份
2、HDFS 默認(rèn) BlockSize 是多大?
默認(rèn)64MB
3、負(fù)責(zé)HDFS數(shù)據(jù)存儲的是哪一部分?
DataNode負(fù)責(zé)數(shù)據(jù)存儲
4、SecondaryNameNode的目的是什么?
他的目的使幫助NameNode合并編輯日志,減少NameNode 啟動時間
5、文件大小設(shè)置,增大有什么影響?
HDFS中的文件在物理上是分塊存儲(block),塊的大小可以通過配置參數(shù)( dfs.blocksize)來規(guī)定,默認(rèn)大小在hadoop2.x版本中是128M,老版本中是64M。
思考:為什么塊的大小不能設(shè)置的太小,也不能設(shè)置的太大?
HDFS的塊比磁盤的塊大,其目的是為了最小化尋址開銷。如果塊設(shè)置得足夠大,從磁盤傳輸數(shù)據(jù)的時間會明顯大于定位這個塊開始位置所需的時間。因而,傳輸一個由多個塊組成的文件的時間取決于磁盤傳輸速率。
如果尋址時間約為10ms,而傳輸速率為100MB/s,為了使尋址時間僅占傳輸時間的1%,我們要將塊大小設(shè)置約為100MB。默認(rèn)的塊大小128MB。
塊的大?。?0ms100100M/s = 100M,如圖
[圖片上傳失敗...(image-1dd5bb-1599539314140)]
增加文件塊大小,需要增加磁盤的傳輸速率。
6、hadoop的塊大小,從哪個版本開始是128M
Hadoop1.x都是64M,hadoop2.x開始都是128M。
7、HDFS的存儲機(jī)制(☆☆☆☆☆)
HDFS存儲機(jī)制,包括HDFS的寫入數(shù)據(jù)過程和讀取數(shù)據(jù)過程兩部分
HDFS寫數(shù)據(jù)過程

1)客戶端通過Distributed FileSystem模塊向NameNode請求上傳文件,NameNode檢查目標(biāo)文件是否已存在,父目錄是否存在。
2)NameNode返回是否可以上傳。
3)客戶端請求第一個 block上傳到哪幾個datanode服務(wù)器上。
4)NameNode返回3個datanode節(jié)點,分別為dn1、dn2、dn3。
5)客戶端通過FSDataOutputStream模塊請求dn1上傳數(shù)據(jù),dn1收到請求會繼續(xù)調(diào)用dn2,然后dn2調(diào)用dn3,將這個通信管道建立完成。
6)dn1、dn2、dn3逐級應(yīng)答客戶端。
7)客戶端開始往dn1上傳第一個block(先從磁盤讀取數(shù)據(jù)放到一個本地內(nèi)存緩存),以packet為單位,dn1收到一個packet就會傳給dn2,dn2傳給dn3;dn1每傳一個packet會放入一個應(yīng)答隊列等待應(yīng)答。
8)當(dāng)一個block傳輸完成之后,客戶端再次請求NameNode上傳第二個block的服務(wù)器。(重復(fù)執(zhí)行3-7步)。
HDFS讀數(shù)據(jù)過程

1)客戶端通過Distributed FileSystem向NameNode請求下載文件,NameNode通過查詢元數(shù)據(jù),找到文件塊所在的DataNode地址。
2)挑選一臺DataNode(就近原則,然后隨機(jī))服務(wù)器,請求讀取數(shù)據(jù)。
3)DataNode開始傳輸數(shù)據(jù)給客戶端(從磁盤里面讀取數(shù)據(jù)輸入流,以packet為單位來做校驗)。
4)客戶端以packet為單位接收,先在本地緩存,然后寫入目標(biāo)文件。
8、secondary namenode工作機(jī)制(☆☆☆☆☆)

1)第一階段:NameNode啟動
(1)第一次啟動NameNode格式化后,創(chuàng)建fsimage和edits文件。如果不是第一次啟動,直接加載編輯日志和鏡像文件到內(nèi)存。
(2)客戶端對元數(shù)據(jù)進(jìn)行增刪改的請求。
(3)NameNode記錄操作日志,更新滾動日志。
(4)NameNode在內(nèi)存中對數(shù)據(jù)進(jìn)行增刪改查。
2)第二階段:Secondary NameNode工作
(1)Secondary NameNode詢問NameNode是否需要checkpoint。直接帶回NameNode是否檢查結(jié)果。
(2)Secondary NameNode請求執(zhí)行checkpoint。
(3)NameNode滾動正在寫的edits日志。
(4)將滾動前的編輯日志和鏡像文件拷貝到Secondary NameNode。
(5)Secondary NameNode加載編輯日志和鏡像文件到內(nèi)存,并合并。
(6)生成新的鏡像文件fsimage.chkpoint。
(7)拷貝fsimage.chkpoint到NameNode。
(8)NameNode將fsimage.chkpoint重新命名成fsimage。
9、NameNode與SecondaryNameNode 的區(qū)別與聯(lián)系?(☆☆☆☆☆)
機(jī)制流程看第7題
1)區(qū)別
(1)NameNode負(fù)責(zé)管理整個文件系統(tǒng)的元數(shù)據(jù),以及每一個路徑(文件)所對應(yīng)的數(shù)據(jù)塊信息。
(2)SecondaryNameNode主要用于定期合并命名空間鏡像和命名空間鏡像的編輯日志。
2)聯(lián)系:
(1)SecondaryNameNode中保存了一份和namenode一致的鏡像文件(fsimage)和編輯日志(edits)。
(2)在主namenode發(fā)生故障時(假設(shè)沒有及時備份數(shù)據(jù)),可以從SecondaryNameNode恢復(fù)數(shù)據(jù)。
10、HDFS組成架構(gòu)(☆☆☆☆☆)

架構(gòu)主要由四個部分組成,分別為HDFS Client、NameNode、DataNode和Secondary NameNode。下面我們分別介紹這四個組成部分。
1)Client:就是客戶端。
(1)文件切分。文件上傳HDFS的時候,Client將文件切分成一個一個的Block,然后進(jìn)行存儲;
(2)與NameNode交互,獲取文件的位置信息;
(3)與DataNode交互,讀取或者寫入數(shù)據(jù);
(4)Client提供一些命令來管理HDFS,比如啟動或者關(guān)閉HDFS;
(5)Client可以通過一些命令來訪問HDFS;
2)NameNode:就是Master,它是一個主管、管理者。
(1)管理HDFS的名稱空間;
(2)管理數(shù)據(jù)塊(Block)映射信息;
(3)配置副本策略;
(4)處理客戶端讀寫請求。
3) DataNode:就是Slave。NameNode下達(dá)命令,DataNode執(zhí)行實際的操作。
(1)存儲實際的數(shù)據(jù)塊;
(2)執(zhí)行數(shù)據(jù)塊的讀/寫操作。
4) Secondary NameNode:并非NameNode的熱備。當(dāng)NameNode掛掉的時候,它并不能馬上替換NameNode并提供服務(wù)。
(1)輔助NameNode,分擔(dān)其工作量;
(2)定期合并Fsimage和Edits,并推送給NameNode;
(3)在緊急情況下,可輔助恢復(fù)NameNode。
11、HAnamenode 是如何工作的? (☆☆☆☆☆)

ZKFailoverController主要職責(zé)
1)健康監(jiān)測:周期性的向它監(jiān)控的NN發(fā)送健康探測命令,從而來確定某個NameNode是否處于健康狀態(tài),如果機(jī)器宕機(jī),心跳失敗,那么zkfc就會標(biāo)記它處于一個不健康的狀態(tài)。
2)會話管理:如果NN是健康的,zkfc就會在zookeeper中保持一個打開的會話,如果NameNode同時還是Active狀態(tài)的,那么zkfc還會在Zookeeper中占有一個類型為短暫類型的znode,當(dāng)這個NN掛掉時,這個znode將會被刪除,然后備用的NN,將會得到這把鎖,升級為主NN,同時標(biāo)記狀態(tài)為Active。
3)當(dāng)宕機(jī)的NN新啟動時,它會再次注冊zookeper,發(fā)現(xiàn)已經(jīng)有znode鎖了,便會自動變?yōu)镾tandby狀態(tài),如此往復(fù)循環(huán),保證高可靠,需要注意,目前僅僅支持最多配置2個NN。
4)master選舉:如上所述,通過在zookeeper中維持一個短暫類型的znode,來實現(xiàn)搶占式的鎖機(jī)制,從而判斷那個NameNode為Active狀態(tài)
