天天看點

【最全的大資料面試系列】Hadoop面試題大全(一)

🚀 作者 :“大資料小禅”

🚀 **專欄簡介 **:本專欄主要分享收集的大資料相關的面試題,涉及到Hadoop,Spark,Flink,Zookeeper,Flume,Kafka,Hive,Hbase等大資料相關技術。大資料面試專欄位址。

🚀 **個人首頁 **:大資料小禅

🚀 **粉絲福利 **:加入小禅的大資料社群

🚀 歡迎小夥伴們 點贊👍、收藏⭐、留言💬

面試題目錄

1、叢集的最主要瓶頸

2、Hadoop運作模式

3、HDFS寫流程

4、解釋“hadoop”和“hadoop 生态系統”兩個概念

5、請列出正常工作的Hadoop叢集中Hadoop都分别需要啟動哪些程序,它們的作用分别是什麼?

6、 HDFS 中的 block 預設儲存幾份?

7、HDFS讀流程

8、負責HDFS資料存儲的是哪一部分?

9、SecondaryNameNode的目的是什麼?

10、hadoop的塊大小,從哪個版本開始是128M

11、HDFS 在讀取檔案的時候,如果其中一個塊突然損壞了怎麼辦

12、econdary namenode工作機制

13、HDFS組成架構

總結

磁盤IO

單機版、僞分布式模式、完全分布式模式

1)client 用戶端發送上傳請求,通過 RPC 與 namenode 建立通信,namenode 檢查該使用者是否有上傳權限,以及上傳的檔案是否在 hdfs 對應的目錄下重名,如果這兩者有任意一個不滿足,則直接報錯,如果兩者都滿足,則傳回給用戶端一個可以上傳的資訊

2)client 根據檔案的大小進行切分,預設 128M一塊,切分完成之後給namenode 發送請求第一個 block 塊上傳到哪些伺服器上

3)namenode 收到請求之後,根據網絡拓撲和機架感覺以及副本機制進行檔案配置設定,傳回可用的 DataNode 的位址

4)用戶端收到位址之後與伺服器位址清單中的一個節點如 A 進行通信,本質上就是 RPC 調用,建立 pipeline,A 收到請求後會繼續調用 B,B 在調用 C,将整個 pipeline 建立完成,逐級傳回 client

5)client 開始向 A 上發送第一個 block(先從磁盤讀取資料然後放到本地記憶體緩存),以 packet(資料包,64kb)為機關,A 收到一個 packet 就會發送給 B,然後 B 發送給 C,A 每傳完一個 packet 就會放入一個應答隊列等待應答

6)資料被分割成一個個的 packet 資料包在 pipeline 上依次傳輸,在pipeline 反向傳輸中,逐個發送 ack(指令正确應答),最終由 pipeline 中第一個 DataNode 節點 A 将 pipelineack 發送給 Client

7)當一個 block 傳輸完成之後, Client 再次請求 NameNode 上傳第二個block ,namenode 重新選擇三台 DataNode 給 client

Hadoop是指Hadoop架構本身;hadoop生态系統,不僅包含hadoop,還包括保證hadoop架構正常高效運作其他架構,比如zookeeper、Flume、Hbase、Hive、Sqoop等輔助架構。

1)NameNode:它是hadoop中的主伺服器,管理檔案系統名稱空間和對叢集中存儲的檔案的通路,儲存有metadate。

2)SecondaryNameNode:它不是namenode的備援守護程序,而是提供周期檢查點和清理任務。幫助NN合并editslog,減少NN啟動時間。

3)DataNode:它負責管理連接配接到節點的存儲(一個叢集中可以有多個節點)。每個存儲資料的節點運作一個datanode守護程序。

4)ResourceManager(JobTracker):JobTracker負責排程DataNode上的工作。每個DataNode有一個TaskTracker,它們執行實際工作。

5)NodeManager:(TaskTracker)執行任務。

6)DFSZKFailoverController:高可用時它負責監控NN的狀态,并及時的把狀态資訊寫入ZK。它通過一個獨立線程周期性的調用NN上的一個特定接口來擷取NN的健康狀态。FC也有選擇誰作為Active NN的權利,因為最多隻有兩個節點,目前選擇政策還比較簡單(先到先得,輪換)。

7)JournalNode:高可用情況下存放namenode的editlog檔案。

預設儲存3份

1)client 向 namenode 發送 RPC 請求。請求檔案 block 的位置

2)namenode 收到請求之後會檢查使用者權限以及是否有這個檔案,如果都符合,則會視情況傳回部分或全部的 block 清單,對于每個 block,NameNode都會傳回含有該 block 副本的 DataNode 位址; 這些傳回的 DN 位址,會按照叢集拓撲結構得出 DataNode 與用戶端的距離,然後進行排序,排序兩個規則:網絡拓撲結構中距離 Client 近的排靠前;心跳機制中逾時彙報的 DN 狀态為 STALE,這樣的排靠後

3)Client 選取排序靠前的 DataNode 來讀取 block,如果用戶端本身就是DataNode,那麼将從本地直接擷取資料(短路讀取特性)

4)底層上本質是建立 Socket Stream(FSDataInputStream),重複的調用父類 DataInputStream 的 read 方法,直到這個塊上的資料讀取完畢

5)當讀完清單的 block 後,若檔案讀取還沒有結束,用戶端會繼續向NameNode 擷取下一批的 block 清單6)讀取完一個 block 都會進行 checksum 驗證,如果讀取 DataNode 時出現錯誤,用戶端會通知 NameNode,然後再從下一個擁有該 block 副本的DataNode 繼續讀

7)read 方法是并行的讀取 block 資訊,不是一塊一塊的讀取;NameNode隻是傳回 Client 請求包含塊的 DataNode 位址,并不是傳回請求塊的資料

8) 最終讀取來所有的 block 會合并成一個完整的最終檔案

DataNode負責資料存儲

他的目的使幫助NameNode合并編輯日志,減少NameNode 啟動時間

Hadoop1.x都是64M,hadoop2.x開始都是128M。

用戶端讀取完 DataNode 上的塊之後會進行 checksum 驗證,也就是把用戶端讀取到本地的塊與 HDFS 上的原始塊進行校驗,如果發現校驗結果不一緻,用戶端會通知NameNode,然後再從下一個擁有該 block 副本的 DataNode 繼續讀

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。

NameNode與SecondaryNameNode 的差別與聯系?

1)差別

 (1)NameNode負責管理整個檔案系統的中繼資料,以及每一個路徑(檔案)所對應的資料塊資訊。

 (2)SecondaryNameNode主要用于定期合并命名空間鏡像和命名空間鏡像的編輯日志。

2)聯系:

 (1)SecondaryNameNode中儲存了一份和namenode一緻的鏡像檔案(fsimage)和編輯日志(edits)。

 (2)在主namenode發生故障時(假設沒有及時備份資料),可以從SecondaryNameNode恢複資料。

架構主要由四個部分組成,分别為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。

Hadoop的面試題總共分成兩個篇章,内容較多,小夥伴們可以選擇自己需要的部分進行檢視。更多的大資料資料以及本文安裝包可以通過下方公衆号擷取哦,加入小禅的🏘️大資料技術社群一起交流學習,感謝支援!💪