前言
hadoop在大資料面試中的比重已經呈下降趨勢了,因為有spark的存在,hadoop存在感越來越低,但因為有分布式檔案系統HDFS的存在,hadoop也不會被時代所拋棄,
面試程序中涉及hadoop的知識點主要集中與shuffle程序,切片機制,性能調優,以及datanode掛了怎么辦,HA高可用等這些真實場景問題,可見除了一些基本的知識基礎之外,性能調優和真實場景的相關問題是面試問的比較多的,
秋招高頻題
1.hadoop的各個組件
2.hadoop作業提交到yarn的流程:
(1)client將切片清單/配置/jar包上傳到HDFS,
(2)RM收到請求后,選一個滿足要求的NM,通知它啟動一個特殊的Container,稱為ApplicationMaster(AM),后續流程由AM發起,
(3)AM啟動后,從HDFS下載切片清單,AM向RM申請資源(Container),
(4)若有足夠資源,RM會將Container分給NM,Container反向注冊給AM,
(5)AM將任務分發給Container,
(6)Container執行具體任務,NM監控任務執行情況,
(7)各個Container向AM匯報自己的執行情況,都完成后,AM向RM注銷任務,RM向NM殺死Container,任務結束.
3.hive與spark區別
4.Hadoop沒被淘汰因為什么?hdfs
5.hdfs與hbase有什么關系?
hbase底層是hdfs
6.hdfs默認副本數為什么是3?
hdfs采用機架感知策略來改進資料可靠性,可用性和網路帶寬的利用率,
在大多數情況下,hdfs的副本數是3,hdfs的存放策略是一個副本在本地機架節點上,另外一個副本存放在同一機架的另一個節點上,第三個副本存放在不同機架的節點上
這種策略是減少了機架間的資料傳輸,提高了寫操作的效率,
7.hdfs讀寫流程
- hdfs寫流程:
(1)客戶端與NameNode建立連接,創建檔案元資料資訊
(2)NameNode判斷元資料是否有效
(3)NameNode觸發副本存放策略,回傳一個有序的DataNode串列
(4)client與DataNode建立管道連接,客戶端將檔案塊切成一個個packet
(5)客戶端將packet放入管道并向第一個DataNode傳輸
(6)第一個DataNode保存后發送給第二個DataNode,第二個DataNode保存后發送給第三個DataNode(類似流水線)
(7)幾個DataNode會與NameNode建立心跳,確認傳輸完成后完成寫流程
- hdfs讀流程:
(1)HDFS會盡量讀離它最近的副本,即如果同一個機架上有副本,就讀它
(2)客戶端與NameNode互動檔案元資料,獲取檔案塊的位置,NameNode會按照距離策略排序回傳DataNode串列
(3)客戶端從最近的DataNode開始讀,先建立管道,然后DataNode將檔案塊的一個個packet傳給客戶端,
8.MapReduce中Shuffle程序:
(1)shuffle發生在map()方法之后,reduce()方法之前
(2)在map()完成后,會先通過getPartition()方法得到記錄進入哪個磁區
(3)然后資料進入環形緩沖區(默認100兆,超過80%會反向溢寫),溢寫時對資料進行快排,對key按照字典序對索引進行排序
(4)溢寫完產生多個溢寫檔案,進行磁區歸并排序,將資料放到指定磁區,等待reduce拉取
(5)每個reduce拉取自己指定磁區的資料,首先放入記憶體,記憶體不夠再寫入磁盤,進行歸并排序,還可進行分組排序,最后進入reduce方法
9.map端的并行度取決于切片數
10.為什么要有shuffle程序,為什么有reduce就要有shuffle程序
shuffle的本意是洗牌,把一組有一定規律的資料盡量打散轉換成一組無規律的資料,而MapReduce中的shuffle更像是洗牌的逆程序,
把一組無規律的資料盡量轉換成一組具有一定規律的資料,Map是映射,負責資料的過濾分發,reduce是規約,負責資料的計算歸并
reduce的資料來源于map,map的輸出即為reduce的輸入,reduce需要通過shuffle來獲取資料,
shuffle程序必然涉及磁區器,需要重新計算資料所屬磁區,這樣相同的key才會經hash后進入同一個磁區,完成資料的過濾分發程序,
11.mapreduce分桶的作用
分桶可以利于檢索我們想要的資料,縮小了檢索的范圍
12.某個datanode掛了怎么辦?
13.mapreduce的容錯機制:
(1)JobTracker:無容錯機制,掛掉之后需要人工介入,重啟
用戶可通過配置一些引數,以便JobTracker重啟后,讓作業恢復運行,這樣JobTracker重啟前,會在histrory log中記錄各個作業的運行狀態
這樣在JobTracker重啟后,重新提交這些作業,并只對未完成的task進行重新調度,
(2)TaskTracker:匯報心跳
當超過引數超過的時間間隔時未向jobTracker匯報心跳,則認為它死亡,并將其從調度池中洗掉;還可設定一些tasktracker host,表示這些節點不允許接入集群,也不會被分配task
(3)Job
當一個作業在某個tasktracker上失敗的task個數超過設定值,則該tasktracker被加到該job的黑名單中
(4)Task
每個map Task,每個reduce task都有最大嘗試次數
(5)record
跳過壞記錄的條數也可設定
(6)磁盤
用戶可配置多個磁盤目錄,將map task中間結果分到不同的磁盤上,增強容錯性,map task臨時結果將被輪詢寫到這些目錄上,以避免某個磁盤檔案目錄資料過多,
也可每次選擇資料最少的磁盤目錄寫入,采樣小頂堆等
14.hadoop的HA:
(1)多個節點,主NN(active 狀態)與備NN(Standby 狀態),主NN對外提供服務
(2)利用一個可靠的中間件集群(JN)journalonde負責同步NN的editLog,實作最終一致性,
(3)通過zookeeper集群協調NN的主從選舉和切換,用到了zk的事件回呼機制,
用兩個行程分別監聽主備有無掛掉,一個掛了,會在zk釋放鎖,通過回呼機制讓另一個NN搶鎖,以便備成為主;若監聽主的行程掛了,zk也會釋放鎖,備節點成為主節點
(4)DN同時向NN匯報block塊的資訊,
HA的資料最終一致性由兩部分組成:
一是中間件集群JN同步主NN的editlog,備NN去訂閱JN的日志,實作最終一致性,這就完成了客戶端互動操作的同步,
二是通過心跳機制DN定期向所有NN發送block塊的資訊,
HDFS-Federation解決方案:
解決了NN的訪問壓力過大,記憶體受限的問題;通過元資料分治,復用DN存盤,元資料訪問隔離性;DN目錄隔離block塊實作,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/155193.html
標籤:其他
上一篇:Redis——Redis用作資料庫(持久化/RDB/AOF)
下一篇:離散數學
