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

語言: CN / TW / HK

theme: channing-cyan

🚀 作者 :“大資料小禪”

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

🚀 個人主頁 :大資料小禪

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

1、叢集的最主要瓶頸

磁碟IO

2、Hadoop執行模式

單機版、偽分散式模式、完全分散式模式

3、HDFS寫流程

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

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

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

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

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檔案。

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

預設儲存3份

7、HDFS讀流程

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 會合併成一個完整的最終檔案

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

DataNode負責資料儲存

9、SecondaryNameNode的目的是什麼?

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

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

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

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

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

12、econdary 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。

NameNode與SecondaryNameNode 的區別與聯絡? 1)區別
  (1)NameNode負責管理整個檔案系統的元資料,以及每一個路徑(檔案)所對應的資料塊資訊。
  (2)SecondaryNameNode主要用於定期合併名稱空間映象和名稱空間映象的編輯日誌。
2)聯絡:
  (1)SecondaryNameNode中儲存了一份和namenode一致的映象檔案(fsimage)和編輯日誌(edits)。
  (2)在主namenode發生故障時(假設沒有及時備份資料),可以從SecondaryNameNode恢復資料。

13、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。

總結


Hadoop的面試題總共分成兩個篇章,內容較多,小夥伴們可以選擇自己需要的部分進行檢視。更多的大資料資料以及本文安裝包可以通過關我獲取哈。