1. 程式人生 > >hadoop面試題整理(海哥每日默寫)

hadoop面試題整理(海哥每日默寫)

2018.11.26
1、HDFS讀寫流程
(1)寫資料流程
1).客戶端發出請求 hdfs dfs -put /etc/profile /qf/data
2).namenode檢視維護的目錄結構,檢查/qf/data是否存在,如不存在直接報錯”no such file or directory“,
如存在返回給客戶端同意上傳檔案請求,將操作寫入日誌檔案
3).客戶端請求上傳第一個塊,詢問namenode塊的儲存位置
4).namenode檢視自己的datanode池,返回給客戶端一個datanode列表
5).客戶端發出請求建立pipeline
6).客戶端先把檔案寫入快取,達到一個塊的大小時,會在客戶端和第一個datanode建立連線開始流式的傳輸資料,
這個datanode會一小部分一小部分(4K)的接收資料然後寫入本地倉庫,同時會把這些資料傳輸到第二個datanode,
第二個datanode也同樣一小部分一小部分的接收資料並寫入本地倉庫,同時傳輸給第三個datanode
(在流式複製時,逐級傳輸和響應採用響應佇列來等待傳輸結果。佇列響應完成後返回給客戶端)
7).第一個資料塊傳輸完成後會使用同樣的方式傳輸下面的資料塊直到整個檔案上傳完成。
8).整個檔案完成,namenode更新記憶體元資料
(2)讀資料流程


1)客戶端向namenode發起RPC呼叫,請求讀取檔案資料。
2)namenode檢查檔案是否存在,如果存在則獲取檔案的元資訊(blockid以及對應的datanode列表)。
3)客戶端收到元資訊後選取一個網路距離最近的datanode,依次請求讀取每個資料塊。客戶端首先要校檢檔案是否損壞,如果損壞,客戶端會選取另外的datanode請求。
4)datanode與客戶端建立socket連線,傳輸對應的資料塊,客戶端收到資料快取到本地,之後寫入檔案。
5)依次傳輸剩下的資料塊,直到整個檔案合併完成。

2、namenode的啟動過程(元資料還原過程)

(1)載入映象檔案,還原了checkpoint時間節點前的元資料(包含目錄結構,檔案大小,塊的大小,塊的id等等資訊),不包含塊的儲存位置
(2)載入edits檔案,還原了checkpoint時間節點到叢集停止的元資料,不包含塊的儲存位置。(至此namenode還原的元資料唯一缺失的就是塊的儲存位置)
(3)blockreport階段,datanode啟動,向namendoe彙報自己所管理的塊及塊的id,namenode根據塊的ID還原塊的儲存位置
(4)在blockreport結束後,叢集會判斷,datanode的啟動數量(可設定,預設為0),丟失的塊的佔比(可設定,預設0.999f)
是否滿足退出安裝模式的條件,如果滿足,30秒後退出安全模式。在安全模式下namenode會刪除多餘的塊
(副本數為3,結果實際儲存4個。ps:這種情況發生在datanode宕機,叢集把宕機的datanode管理的塊進行了複製,而宕機的datanode又重新啟動了)
還會複製低於副本數的塊。

3、什麼情況下會進入安全模式?
塊的數量低於閥值
datanode啟動數量不夠都會進入安全模式
4、如何離開安全模式
(1)調低閥值
hdfs-site.xml中
dfs.namenode.safemode.threshold-pct
0.999f
(2)強制離開
hdfs dfsadmin -safemode leave
(3)重新格式化叢集
(4)修復損壞的塊檔案

5、HDFS的可靠性策略
1)檔案完整性
在檔案建立時,每個資料塊都產生校驗和,校驗和會儲存在.meta檔案內;
客戶端獲取資料時可以檢查校驗和是否相同,從而發現數據塊是否損壞;
如果正在讀取的資料塊損壞,則可以繼續讀取其它副本。NameNode標記該塊已經損壞,然後複製block達到預期設定的檔案備份數;
DataNode 在其檔案建立後三週驗證其checksum。
2)網路或者機器失效
(1)副本冗餘
(2)機架感知策略(副本放置策略)
(3)心跳機制策略
3)namenode掛掉
(1)主備切換(高可用)
(2)映象檔案和操作日誌磁碟儲存
(3)映象檔案和操作日誌可以儲存多份,多磁碟儲存
4)其他機制
(1)快照(和虛擬機器快照意義相同,儲存了系統某一時刻的影像,可以還原到該時刻)
(2)回收站機制
(3)安全模式


2018.11.27