Hadoop面試題總結(二)——HDFS
1、 HDFS 中的 block 預設儲存幾份?
預設儲存3份
2、HDFS 預設 BlockSize 是多大?
預設64MB
3、負責HDFS資料儲存的是哪一部分?
DataNode負責資料儲存
4、SecondaryNameNode的目的是什麼?
他的目的使幫助NameNode合併編輯日誌,減少NameNode 啟動時間
5、檔案大小設定,增大有什麼影響?
HDFS中的檔案在物理上是分塊儲存(block),塊的大小可以通過配置引數( dfs.blocksize)來規定,預設大小在hadoop2.x版本中是128M,老版本中是64M。
思考:為什麼塊的大小不能設定的太小,也不能設定的太大?
HDFS的塊比磁碟的塊大,其目的是為了最小化定址開銷。如果塊設定得足夠大,從磁碟傳輸資料的時間會明顯大於定位這個塊開始位置所需的時間。
因而,傳輸一個由多個塊組成的檔案的時間取決於磁碟傳輸速率
如果定址時間約為10ms,而傳輸速率為100MB/s,為了使定址時間僅佔傳輸時間的1%,我們要將塊大小設定約為100MB。預設的塊大小128MB。
塊的大小:10ms×100×100M/s = 100M,如圖
增加檔案塊大小,需要增加磁碟的傳輸速率。
6、hadoop的塊大小,從哪個版本開始是128M
Hadoop1.x都是64M,hadoop2.x開始都是128M。
7、HDFS的儲存機制(☆☆☆☆☆)
HDFS儲存機制,包括HDFS的寫入資料過程和讀取資料過程兩部分
HDFS寫資料過程
1)客戶端通過Distributed FileSystem模組向NameNode請求上傳檔案,NameNode檢查目標檔案是否已存在,父目錄是否存在。
2)NameNode返回是否可以上傳。
3)客戶端請求第一個 block上傳到哪幾個datanode伺服器上。
4)NameNode返回3個datanode節點,分別為dn1、dn2、dn3。
5)客戶端通過FSDataOutputStream模組請求dn1上傳資料,dn1收到請求會繼續呼叫dn2,然後dn2呼叫dn3,將這個通訊管道建立完成。
6)dn1、dn2、dn3逐級應答客戶端。
7)客戶端開始往dn1上傳第一個block(先從磁碟讀取資料放到一個本地記憶體快取),以packet為單位,dn1收到一個packet就會傳給dn2,dn2傳給dn3;
dn1每傳一個packet會放入一個應答佇列等待應答。
8)當一個block傳輸完成之後,客戶端再次請求NameNode上傳第二個block的伺服器。(重複執行3-7步)。
HDFS讀資料過程
1)客戶端通過Distributed FileSystem向NameNode請求下載檔案,NameNode通過查詢元資料,找到檔案塊所在的DataNode地址。
2)挑選一臺DataNode(就近原則,然後隨機)伺服器,請求讀取資料。
3)DataNode開始傳輸資料給客戶端(從磁盤裡面讀取資料輸入流,以packet為單位來做校驗)。
4)客戶端以packet為單位接收,先在本地快取,然後寫入目標檔案。
8、secondary namenode工作機制(☆☆☆☆☆)
1)第一階段:NameNode啟動
(1)第一次啟動NameNode格式化後,建立fsimage和edits檔案。如果不是第一次啟動,直接載入編輯日誌和映象檔案到記憶體。
(2)客戶端對元資料進行增刪改的請求。
(3)NameNode記錄操作日誌,更新滾動日誌。
(4)NameNode在記憶體中對資料進行增刪改查。
2)第二階段:Secondary NameNode工作
(1)Secondary NameNode詢問NameNode是否需要checkpoint。直接帶回NameNode是否檢查結果。
(2)Secondary NameNode請求執行checkpoint。
(3)NameNode滾動正在寫的edits日誌。
(4)將滾動前的編輯日誌和映象檔案拷貝到Secondary NameNode。
(5)Secondary NameNode載入編輯日誌和映象檔案到記憶體,併合並。
(6)生成新的映象檔案fsimage.chkpoint。
(7)拷貝fsimage.chkpoint到NameNode。
(8)NameNode將fsimage.chkpoint重新命名成fsimage。
9、NameNode與SecondaryNameNode 的區別與聯絡?(☆☆☆☆☆)
機制流程看第7題
1)區別
(1)NameNode負責管理整個檔案系統的元資料,以及每一個路徑(檔案)所對應的資料塊資訊。
(2)SecondaryNameNode主要用於定期合併名稱空間映象和名稱空間映象的編輯日誌。
2)聯絡:
(1)SecondaryNameNode中儲存了一份和namenode一致的映象檔案(fsimage)和編輯日誌(edits)。
(2)在主namenode發生故障時(假設沒有及時備份資料),可以從SecondaryNameNode恢復資料。
10、HDFS組成架構(☆☆☆☆☆)
架構主要由四個部分組成,分別為HDFS Client、NameNode、DataNode和Secondary NameNode。下面我們分別介紹這四個組成部分。
1)Client:就是客戶端。
(1)檔案切分。檔案上傳HDFS的時候,Client將檔案切分成一個一個的Block,然後進行儲存;
(2)與NameNode互動,獲取檔案的位置資訊;
(3)與DataNode互動,讀取或者寫入資料;
(4)Client提供一些命令來管理HDFS,比如啟動或者關閉HDFS;
(5)Client可以通過一些命令來訪問HDFS;
2)NameNode:就是Master,它是一個主管、管理者。
(1)管理HDFS的名稱空間;
(2)管理資料塊(Block)對映資訊;
(3)配置副本策略;
(4)處理客戶端讀寫請求。
3)DataNode:就是Slave。NameNode下達命令,DataNode執行實際的操作。
(1)儲存實際的資料塊;
(2)執行資料塊的讀/寫操作。
4)Secondary NameNode:並非NameNode的熱備。當NameNode掛掉的時候,它並不能馬上替換NameNode並提供服務。
(1)輔助NameNode,分擔其工作量;
(2)定期合併Fsimage和Edits,並推送給NameNode;
(3)在緊急情況下,可輔助恢復NameNode。
11、HAnamenode 是如何工作的? (☆☆☆☆☆)
ZKFailoverController主要職責
1)健康監測:週期性的向它監控的NN傳送健康探測命令,從而來確定某個NameNode是否處於健康狀態,如果機器宕機,心跳失敗,那麼zkfc就會標記它處於一個不健康的狀態。
2)會話管理:如果NN是健康的,zkfc就會在zookeeper中保持一個開啟的會話,如果NameNode同時還是Active狀態的,那麼zkfc還會在Zookeeper中佔有一個型別為短暫型別的znode,當這個NN掛掉時,這個znode將會被刪除,然後備用的NN,將會得到這把鎖,升級為主NN,同時標記狀態為Active。
3)當宕機的NN新啟動時,它會再次註冊zookeper,發現已經有znode鎖了,便會自動變為Standby狀態,如此往復迴圈,保證高可靠,需要注意,目前僅僅支援最多配置2個NN。
4)master選舉:如上所述,通過在zookeeper中維持一個短暫型別的znode,來實現搶佔式的鎖機制,從而判斷那個NameNode為Active狀態