Hadoop二十道面試問題

banq發表於2022-01-09
本文將列出您在面試當天可能遇到的一些最常見的問題。無論您的接觸程度如何,此列表都包含從基礎到高階問題的所有內容,涉及 Hadoop 叢集、HDFS、MapReduce、HBase、Pig 和 Hive。

1.什麼是大資料?

任何難以捕獲、整理或分析的資料形式都可以稱為“大資料”。然而,在分析領域,大資料通常被稱為大量複雜資訊的集合。通過傳統方法和工具無法使用這些套件。此類資料的一個示例可以是收集世界上存在並擁有永久地址的每個人的資訊。

Apache Hadoop 及其擴充套件軟體系列等工具可用於分析此類大資料。 

 

2. 描述 Hadoop 及其元件

Hadoop 是一個可用於儲存、分析和處理大資料的軟體系列。它挖掘大資料並提供企業可以用來改善其行業發展的見解。在上面的示例中,一個國家的政府可以使用該資料來建立可靠的人口普查報告。

Hadoop的兩個主要元件是:

  • 儲存單元稱為 Hadoop 分散式檔案系統 (HDFS)
  • 被稱為又一個資源協商器 (YARN) 的處理框架

這兩個元件還有執行多個任務的子元件

以下是系統中的各種 Hadoop 守護程式及其功能:

  • NameNode——主節點;負責儲存所有檔案和目錄的後設資料
  • DataNode——從節點;包含實際資料
  • Secondary NameNode——在NameNode失敗的情況下使用;它會定期重新整理內容
  • ResourceManager——中央權威;管理資源和排程
  • NodeManager – 在從機上執行並執行大多數任務,例如應用程式執行和監控 CPU 使用率;向資源管理器報告

 

4. 部署大資料解決方案的各個步驟是什麼?

大資料解決方案涉及的各個步驟是:

資料攝取是部署大資料解決方案時最重要的過程,以便從 ERP 系統 (SAP)、任何 CRM(如 Siebel 和 Salesforce)、關聯式資料庫管理系統(如 Oracle 和 MySQL)等多種來源中提取資料,或者可以是平面檔案、日誌檔案、影像、文件和社交媒體源。此特定資料將儲存在 HDFS 中。 

攝取資料後,後續過程是將資料儲存在 NoSQL 資料庫中,例如 HBase 或 HDFS。HDFS 針對順序訪問進行了優化,而 HBase 儲存用於隨機讀取或寫入的訪問。

資料處理是使用任何這些處理框架(如 Spark、Pig、MapReduce、Hive 等)處理資料的最終步驟。

 

5. 什麼是 Hadoop MapReduce?

Hadoop MapReduce 是一個框架,用於處理 Hadoop 叢集中的大量資料。與資料分析的替代方法相比,它減少了時間消耗。MapReduce 的獨特之處在於它跨叢集同時執行任務以減少處理時間。

 

6. 在 Map Reduce 程式設計中,為什麼我們使用排序和洗牌階段。使用它的目的是什麼?

在 Map Reduce 程式設計中,mapper 和 reducer 是兩個重要的階段,其中排序和 shuffle 洗牌是 map-reduce 中的兩個主要操作。因為,Hadoop 框架基本上採用結構化或非結構化資料,然後將這些資料分離為鍵、值對,其中對映器程式將鍵和值中的資料分離和排列以用於進一步處理。排序和洗牌混洗階段由框架完成,其中來自每個對映器的資料按鍵分組並在reducer 之間拆分,並進一步按鍵排序。每個 reducer 獲取與同一個鍵關聯的所有值。

Shuffle 是從 mapper 到 reducer 的資料傳輸過程,因此對於 reducer 來說是必要的。洗牌過程可以在對映map階段完成之前開始,以節省一些時間。這就是reduce狀態大於0%但小於33%,而map-status沒有同時達到100%的原因。

排序,當排序後的輸入資料中的下一個鍵與前一個不同時,啟動新的 reduce 任務。每個reduce任務都獲取鍵值對列表,以便按鍵對值進行分組,方法是呼叫輸入為鍵列表(值)的reduce()方法。 

在 Shuffle洗牌 過程中,來自 mapper 的中間資料被傳輸到 0、1 或更多的 reducer。每個reducer獲得一個或多個鍵,其關聯值取決於平衡負載的reducer數量。另一方面,每個鍵的值在本地排序。如果我們指定零個reducer(即setNumReduceTasks(0)),則不會執行排序和混洗。在這種情況下,MapReduce 停止在 map 階段並且不包括任何型別的排序。

 

7. Hadoop 輸入格式有哪些?

有三種眾所周知的輸入格式,即:

  • 文字——文字行
  • 值 - 純文字檔案
  • 序列——按順序輸入的多個檔案

文字是預設使用的輸入格式。

 

8. Hadoop 中的心跳是什麼?

Heartbeat 是資料節點和 NameNode 之間共享的一種通訊形式(訊號)。如果 NameNode 或作業跟蹤器沒有響應此通訊嘗試,則意味著系統中存在錯誤。

 

9. NameNode當機時如何修復?

可以按照以下步驟修復 NameNode:

  • FsImage,檔案系統後設資料副本,應該用於啟動一個新的 NameNode
  • 配置資料節點以確認這個新 NameNode 的建立
  • NameNode 將開始執行,叢集將在完全載入最後一個 FsImage 檢查點後恢復正常。

在某些情況下,NameNode 的復興可能需要很長時間。

 

10. 區分 Hadoop 1 和 Hadoop 2

Hadoop 1和Hadoop 2的區別可以通過兩個引數來體現,如下表所示:

引數                 Hadoop 1                                   Hadoop 2
Passive NameNode    由於它是單點故障,因此必須重新啟動 NameNode 以恢復應用程式     不是單點故障;被動 NameNode 可以迅速取而代之
Processing (YARN)    僅限於其他工具無法承擔處理任務的 MRV1 結構                MRV2結構

11.什麼是FsImage?說明其顯著特點

FsImage 是名稱空間檢查點的日誌。最新的檢查點允許在必要時恢復 NameNode 和其他元素。

 

12. 什麼是檢查點?

檢查點是儲存資料的最後一次載入。它捕獲 FsImage 並編輯名稱空間日誌,然後將兩者壓縮成一個新的 FsImage。這是一個連續的過程。這個建立檢查點的任務是由Secondary NameNode 執行的。

 

13、定義JobTracker在Hadoop中的作用?

資源管理、在新增或更新資源時跟蹤資源以及任務生命週期管理是 JobTracker 的一些關鍵職責。更詳細地說:

  • 它識別資料位置並與 NameNode 通訊
  • 通過 TaskTracker 查詢最佳可用節點來執行任務
  • 必要時將過載分配給從節點
  • 監控 TaskTracker

本質上,JobTracker 就像 Hadoop 生態系統中的維護人員一樣工作。

 

14. 說出 Hadoop 的一大缺點?

Hadoop 的一個主要缺點是限制函式的安全性。它是用 Java 編寫的,並且是眾包的,因此極易受到黑客攻擊。這是一個嚴重的問題,因為關鍵資料在這裡儲存和處理。

 

15. 如果您嘗試從現有輸出目錄中拉取 Hadoop 作業,會發生什麼?

該對話方塊將丟擲一個錯誤並說輸出檔案目錄已經存在。這並不理想,因為要執行 MapReduce 作業,需要確保不存在目錄。在這種情況下,它必須被刪除。shell 可用於刪除目錄

  

16. 解釋您將如何選擇各種檔案格式以使用 Apache Hadoop 儲存和處理資料?

選擇特定檔案格式的決定基於以下因素,例如:

  • 模式演變以更改、新增和重新命名欄位。
  • 使用模式,例如訪問 50 列中的 5 列 大部分列的 V/S 訪問。
  • 並行處理的分裂能力。 
  • 傳輸/讀/寫效能到節省儲存空間的塊壓縮。

Hadoop 使用了多種檔案格式,例如 JSON、CSV、順序檔案、列式、Parquet 檔案和 AVRO。

  • JSON 檔案

每個 JSON 檔案都有自己的記錄。JSON 將模式和資料的記錄儲存在一起。它還完全啟用了模式演變和拆分能力。但是,JSON 檔案格式不支援塊級壓縮。

  • CSV 檔案 

對於 Hadoop 和外部系統之間的資料交換,CSV 檔案非常適合。使用 CSV 檔案格式時不使用頁首和頁尾行。

  • Parquet 檔案

Parquet 檔案基本上是支援塊級壓縮的列檔案格式。它還針對查詢效能進行了優化,因為它允許從大約 50 多個列記錄中選擇十個或最少數量的列。

  • AVRO 檔案

對於長期模式儲存,AVRO 檔案格式最適合。AVRO 檔案將後設資料與資料一起儲存,並指定獨立的模式以讀取檔案。

Hadoop fs –rmr /path/to/your/output/

 

17. 列出 Apache Pig 相對於 MapReduce 的優勢

以下是 Apache Pig 的一些主要優點:

  • 無需 Java 實現即可進行高階資料交換。有可用的預設
  • 程式碼長度減少 20 倍(與 MapReduce 相比)
  • 新增幾個內建操作,如連線、過濾器和排序,無需額外實現
  • 一個 Join 操作可以單獨執行而不需要額外的資源
  • 支援巢狀資料型別。

總而言之,Apache Pig 作為高階資料流語言的工作效率更高。

 

18. 列出在 Hadoop 中除錯程式碼的一般步驟

以下是除錯程式碼所涉及的步驟:

  • 檢查當前執行的 MapReduce 作業列表
  • 如果孤立作業正在執行,請通過執行以下程式碼檢查 ResourceManager

    • ps -ef | grep –I  ResourceManager
  • 檢查日誌目錄以檢測可能顯示的任何錯誤訊息
  • 根據上述步驟中找到的日誌,檢查操作中可能存在錯誤程式碼的工作節點
  • 通過執行以下程式碼登入節點

    • ps -ef | grep –iNodeManager
  • 檢查 MapReduce 日誌以找出錯誤來源。 

這是 Hadoop 叢集系統中大多數錯誤檢測任務的過程。

  

19. 如果每個節點有 8TB 的可用磁碟空間(即,10 個磁碟具有 1TB,2 個磁碟用於作業系統等,被排除在外)。那麼你將如何估計資料節點的數量(n)?(假設初始資料大小為 600 TB)

在 Hadoop 環境中,由於組織中隨時都在增加資料,因此對硬體需求的估計具有挑戰性。因此,必須根據當前場景對叢集有適當的瞭解,這取決於以下因素:

  1. 要儲存的實際資料大小約為 600TB。
  2. 未來(日/周/月/季/年)資料的增長速度取決於對資料趨勢分析的預測和業務的合理需求。
  3. Hadoop 有一個預設的 3 倍副本因子。
  4. 對於硬體機器的開銷(例如日誌、作業系統等),考慮了兩個磁碟。
  5. 對於中間 reducer 和 mapper,硬碟上的輸出資料是 1x。
  6. 空間利用率在 60-70% 之間。

查詢儲存 600TB 資料所需的資料節點數量的步驟:

  • 給定複製因子:3

資料大小:600TB 

中間資料:1

總儲存要求:3+1*600=2400 TB

可用磁碟大小:8TB

所需的資料節點總數:24008=300 臺機器。

  • 實際計算 = 磁碟空間利用率 + 粗略計算 + 壓縮率

磁碟空間利用率:65%

壓縮比:2.3

儲存總需求:24002.3=1043.5TB

可用磁碟大小:8*0.65=5.2 TB

所需的資料節點總數:1043.55.2=201 臺機器。

叢集實際可用大小(100%):201*8*2.34=925 TB

  • 案例:預計季度資料有20%的增長,我們都需要預測的是特定年份新增的機器

資料增長:每季度增長 20%

附加資料: 

1第一季度:1043.5 * 0.2 = 208.7 TB

2第二季度:1043.5 * 1.2 * 0.2 = 250.44 TB

3 RD季度:1043.5 * 1.2 * 1.2 * 0.2 = 300.5 TB

第4季度:1043.5*1.2*1.2*1.2*0.2=360.6 TB

其他資料節點: 

1第一季度:208.75.2 = 41個機

2第二季度:250.445.2 = 49個機

3第三季度:300.55.2 = 58個機

第4季度:360.65.2=70 臺機器

 

20. 如果您的目錄包含這些檔案 - HadoopTraining.txt、_SpartTraining.txt、#DataScienceTraining.txt、.SalesforceTraining.txt。那麼如果將此目錄傳遞給 Hadoop MapReduce 作業,將處理多少個檔案?

#DataScienceTraining.txt 和 HadoopTraining.txt 將為 MapReduce 作業處理,同時使用任何 FileInputFormat 作為 KeyValueInputFormat、TextInputFormat 或 SequenceFileInputFormat 在 Hadoop 中處理檔案(單個或目錄中),必須確認沒有其中的檔案包含隱藏的檔案字首,如“_”或“.” 原因是 mapreduce FileInputFormat 將預設使用 hiddenFileFilter 類以忽略具有任何這些字首名稱的檔案。

private static final PathFilter hiddenFileFilter = new PathFilter() {
public boolean accept(Path p) {
String name = p.getName();
return !name.startsWith(“_”) && !name.startsWith(“.”);
}
};

但是,即使使用 FileInputFormat.setInputPathFilter 之類的自定義過濾器來消除此類條件, hiddenFileFilter 也將始終處於活動狀態。

相關文章