Hadoop二十道面試問題(2)

banq發表於2022-01-09
21. 如果上傳一個 500MB 的檔案到 HDFS。如果 100MB 的資料已經在 HDFS 中成功上傳,而另一個客戶端即將讀取上傳的資料,而上傳仍在進行中。那麼會發生什麼呢?上傳的那100MB資料是否會顯示?

Hadoop1x 的預設塊大小為 64MB,Hadoop2x 的預設塊大小為 128MB。 

設block-size為100MB,即5個block要複製3次(預設replication-factor)

以下過程描述瞭如何將塊寫入 HDFS:

如果我們有 A、B、C、D 和 E 是客戶端、檔案、名稱節點和資料節點的五個塊。然後首先,客戶端獲取塊 A 並接近名稱節點以獲取資料節點位置,以便儲存當前塊和它的複製副本。一旦資料節點資訊可供客戶端使用,他將直接到達資料節點並開始複製塊 A,同時將複製到第二個資料節點。當塊被複制並複製到資料節點時,塊 A 儲存的確認將到達客戶端,然後客戶端將重新啟動下一個塊即塊 B 的相同過程。

因此,如果一個客戶端正在將 500MB 的檔案上傳到 HDFS,其中 100MB 的資料已成功上傳到 HDFS,而另一個客戶端即將讀取上傳的資料,而上傳仍在進行中,那麼只有當前塊正在寫入將不會對讀者可見。

 

22. 為什麼我們要在停用 Hadoop 叢集中的節點時停止所有任務跟蹤器?

Hadoop叢集中資料節點退役的完整過程應該非常清楚,但是當任務跟蹤器在被退役的資料節點上執行MapReduce作業時需要注意這一點。與資料節點不同,沒有任何優雅的方式來解除任務跟蹤器,其中假設每當當前任務要移動到另一個節點時,就應該依賴任務製作過程來阻止失敗,並進一步將其重新安排在叢集上。可能性是,當任務的最終嘗試在任務跟蹤器上執行時,最終失敗將導致整個作業失敗。因此,停用會停止資料節點,但是為了將當前任務移動到另一個節點,

 

23. NameNode什麼時候進入安全模式?

NameNode 負責管理叢集的元儲存,如果叢集中缺少任何東西,那麼 NameNode 將在叢集可用於寫入使用者之前在安全模式期間檢查所有關鍵資訊。 

NameNode在啟動過程中進入安全模式有幾個原因:

  • NameNode 從 fsimage 載入檔案系統狀態並編輯日誌檔案,並等待資料節點以報告塊。因此,如果塊已存在於另一個叢集中,則無法開始複製。
  • 來自資料節點的心跳和損壞的塊存在於叢集中。一旦 NameNode 驗證了所有相關資訊,它就會離開安全模式,然後叢集就可以訪問了。 

為了從 NameNode 手動進入或離開安全模式,在命令列中使用以下命令:“hdfs dfsadmin -safemode enter/leave”

 

24. 你有沒有做過不平衡的工作,導致記憶體不足?如果是,那麼您將如何處理?

在 MapReduce 作業中,“OutOfMemoryError”是隨著資料以不同大小增長而發生的常見錯誤,這對開發人員來說是一個挑戰,以便估計分配作業所需的記憶體量。 

因此,必須以適當的方式設定以下屬性,以考慮叢集中可用的資源,以避免記憶體不足錯誤:

容器中對映器使用的最大記憶體。

對映器使用的最大堆大小。它必須小於 mapreduce.map.memory.mb 的大小。

  • mapreduce.reduce.memory.mb

容器中 reducer 使用的最大記憶體。

  • mapreduce.reduce.java.opts

reducer 使用的最大堆大小。它必須小於 mapreduce.reduce.memory.mb 的大小。

  • yarn.schedule.maximum-allocation-mb

容器允許的最大分配大小,也需要管理許可權。

 

25. 解釋 Hadoop 中的糾刪碼?

預設情況下,HDFS 在 Hadoop 中將每個塊複製到 3 次。HDFS 複製簡單且具有健壯的形式冗餘,以遮蔽資料節點的故障。但是,複製非常昂貴。3x 複製方案在儲存空間中有 200% 的開銷。 

Hadoop2.x 引入了擦除編碼來代替複製。在此還提供了具有較少空間儲存和 50% 開銷儲存的相同級別的容錯。擦除編碼使用RAID(廉價磁碟冗餘陣列),它通過條帶化實現,其中邏輯順序資料被劃分為位元組、位或塊等小單元。然後,在不同的磁碟上儲存此資料。 

編碼:這裡,RAID對每條資料單元計算奇偶校驗單元並對其進行排序,並通過奇偶校驗恢復錯誤。EC 使用冗餘資料擴充套件訊息以實現容錯。糾刪碼編解碼器對大小一致的資料單元進行操作。它將資料單元作為輸入併產生奇偶校驗單元作為輸出。資料單元和奇偶校驗單元一起稱為 EC 組。

存在兩種可用於 EC 的演算法: 

  • 異或演算法
  • 裡德-所羅門演算法

 

26. 如果 Hadoop 中 reducer 的數量為“0”會怎樣?

如果 reducer 的數量設定為“0”,則不會執行 reducer,也不會發生聚合。因此,在這種情況下,Hadoop 中首選“僅 Map 作業”,其中 map 使用 InputSplit 執行所有任務,而 reducer 不完成任何作業。在這裡,map輸出將是最終輸出。

在 map 和 reduce 階段之間有 sort、key 和 shuffle 階段。其中 shuffle 和 sort 階段負責按升序對鍵進行排序,然後對相同鍵的值進行分組。但是,如果這裡不需要,我們可以避免 reduce 階段。避免reduce階段也將消除排序和混洗階段,從而自動節省網路中的擁塞。

 

27. 區分結構化、非結構化和半結構化資料。

大資料包括高速、海量和可擴充套件的資料種類,分為結構化資料、非結構化資料和半結構化資料三種型別。

結構化資料    非結構化資料    半結構化資料
資料以有組織的方式格式化    無組織形式的資料    資料正在部分組織
使用固定資料方案    存在未知架構     它缺乏資料模型的形式結構
基於關聯式資料庫表    基於字元和二進位制資料    基於 XML/RDF
結構化資料的事務處理成熟,各種併發技術也被使用。    既沒有事務管理,也沒有併發。    這裡的事務基本上是改編自不成熟的資料庫管理系統。
版本超過元組和表    整體版本    可以在此處使用圖或元組的版本
因為,結構化資料依賴於方案,因此靈活性較低    由於缺少模式,半結構化資料非常靈活    比結構化資料更靈活,但不如非結構化資料靈活
它允許複雜的連線    這裡只有文字查詢是可能的    它允許在同一個節點上進行查詢
難以擴充套件資料庫模式    非常可擴充套件    與結構化資料相比,縮放在這方面很簡單
示例:關聯式資料庫管理系統資料    示例:多媒體檔案    示例:XML 和 JSON 檔案

 

28. 如果一個檔案包含 1000 億個 URL。那麼你將如何找到第一個唯一的 URL?

這個問題有大量的資料,即1000億個URL,因此必須將其劃分為適合記憶體的塊,然後需要對這些塊進行處理,然後將結果組合起來以獲得最終答案。在這種情況下,使用雜湊函式中的一致性將檔案劃分為較小的檔案,該雜湊函式產生 N/M 個塊,每個塊為 M(即,主儲存器的大小)。這裡從輸入檔案中讀取每個 URL,並對其應用雜湊函式以找到寫入的塊檔案並進一步附加原始行號的檔案。然後從記憶體中讀取每個檔案併為 URL 構建雜湊表,該雜湊表用於計算每個 URL 的出現次數,然後儲存每個 URL 的行號。在雜湊表構建完成後,掃描計數值為 1 的行號的最低條目,它是塊檔案中的第一個 URL,它本身是唯一的。對所有塊檔案重複上述步驟,並在處理後比較每個 URL 的行號。因此,在處理完所有塊檔案之後,1ST唯一的URL從所有處理輸入發現。

 

29. 區分 MapReduce InputSplit 和 HDFS 塊?

Block:

  • 塊Block是儲存 HDFS 資料的硬碟驅動器上的連續位置。FileSystem 將資料儲存為塊的集合。同樣,HDFS 將每個檔案儲存為一個塊,並將其分佈在 Hadoop 叢集上。
  • 塊是資料的物理表示。
  • HDFS 的預設塊大小為 128MB,可根據需要進行配置。除了最後一個塊外,每個塊的大小相同。最後一個塊可以更小或相同大小。在 Hadoop 系統中,檔案被拆分為 128MB 的塊,並進一步儲存在 Hadoop 檔案系統中

InputSplit:

  • InputSplit 表示要處理的單個 Mapper 的資料。拆分被劃分為記錄,其中每個記錄都由一個對映處理。
  • InputSplits 是資料的邏輯表示。 
  • 預設情況下,拆分的大小約為。等於塊大小。
  • 邏輯記錄不適合 HDFS 塊。
  • 邏輯記錄是穿過塊邊界的線。
  • 第一個拆分包含五行,儘管它跨越了塊。

 

30. 我們可以在 Hive 中使用 LIKE 運算子嗎?

我們可以使用 LIKE 運算子,因為 HIVE 支援 LIKE 運算子。但是 Hive 不支援多值 Like 查詢,如下所示:

SELECT*FROM tablename WHERE firstname LIKE ANY 'root~%','user~%';

因此,只要在 HIVE 中需要,就可以輕鬆地使用 LIKE 運算子。如果需要使用多值 LIKE 運算子,我們將其打破,以便在 HIKE 中工作。

WHERE tbl2.product LIKE concat('%', tbl1.brand, '%')

 

31.區分靜態和動態分割槽。

將資料插入表中時,會建立分割槽,這取決於資料的載入方式。因此,它是最好的效能調整技術。

Hive 中基本上有兩種型別的分割槽,例如:

  • 靜態分割槽
  • 動態分割槽

靜態分割槽:

當大檔案載入到 HIVE 表中時,首選靜態分割槽,與動態分割槽相比,這可以節省我們載入資料的時間。 

這裡手動新增分割槽列,並手動在分割槽表中移動檔案。 

無需完全讀取檔案即可從檔名中獲取分割槽列的名稱。

必須為每個負載指定分割槽列的值。

由於靜態分割槽是 Hive 的一種預設模式,因此可以在下面的屬性集中找到

hive-site.xml
set hive.mapred.mode=strict

動態分割槽:

檔案中可用的每個資料行都通過 MapReduce 作業進行讀取和分割槽。 

在執行 ETL 作業時,動態分割槽已完成。

Hive 中沒有任何預設模式,因此必須在 hive 中設定以下屬性-

site.xml file.
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;

在動態分割槽中,並非在每個載入語句中都指定了分割槽列的值。因此,以下是一些用於使用資料建立動態分割槽表的步驟。

  • 建立X,一個非分割槽表並載入資料
  • 建立Y,一個用於指定列分割槽的分割槽表。
  • 將資料從“X”載入到“Y”為:

hive>INSERT INTO TABLE Y PARTITIONstate SELECT*FROM X;

這裡分割槽列是非分割槽表的最後一列。

 

32.列出Hadoop的一些工業用途。

Hadoop 是一種處理結構化和非結構化資料的方法。以下是 hadoop 和大資料將產生良好推動作用的幾個領域。

  • 流量管理
  • 處理流的入口和出口
  • CMS 和電子郵件
  • 利用hadoop計算叢集分析動物腦神經訊號
  • 欺詐檢測和預防
  • 分析點選流、交易、視訊、社交媒體資料,向目標受眾投放合適的廣告
  • 內容、帖子、影像、視訊等社交媒體實體處理得很好
  • 通過實時分析客戶資料改善業務
  • 情報、國防、網路安全和科學研究等政府機構
  • 醫療器械、醫囑、影像報告、實驗室結果、臨床資料和財務資料等醫療領域資料

 

33. 列出與大資料相關的 5V。

在處理批量資料時,我們需要預見與處理資料相關的情況。以下方面有助於我們描述大資料的性質。

  • Volume 卷 - 資料的大小可能以 PB 或 Exabytes 為單位。資料的指數增長證明了在一段時間內收集的大量資料是合理的。
  • Velocity 速度——資料增長的速度。資料正在從各種來源積累。例如,如今來自社交媒體的資料輸入非常龐大。
  • Variety 多樣性——資料具有不同的格式,如視訊、音訊、csv、word 檔案等。資料型別的這種異質性帶來了許多挑戰和好處。
  • Veracity 準確性——不完整或不一致的資料會導致資料的不確定性。隨著資料變得龐大且來源多樣,準確性和質量難以管理。變得難以信任。
  • Value 價值——難以獲取和處理大資料。通過這個過程有什麼好處?大資料是否為業務增加了任何價值?我們是否獲得了良好的投資回報率,該過程是否有利可圖?

 

34. 解釋 Hadoop 與使用關聯式資料庫管理的傳統處理系統有何不同?

關聯式資料庫管理系統    Hadoop
關聯式資料庫管理系統依賴於資料方案始終已知的結構化資料。    在 Hadoop 中,要儲存的資料是任何型別的,即結構化資料、半結構化資料或非結構化資料。
它不提供或提供有限的處理能力    它允許並行分佈資料以進行處理。
基於“寫入時模式”的關聯式資料庫管理系統,其中模式的驗證必須在載入資料之前完成。    Hadoop 遵循讀取策略模式。
在關聯式資料庫管理系統中,由於資料的模式是已知的,因此讀取速度更快。    在 Hadoop 中,HDFS 寫入期間不存在任何方案驗證,因此寫入速度更快。
線上事務處理 (OLTP) 是合適的。    線上分析處理 (OLAP) 是合適的。
計算速度很快。    這裡的計算速度通常較慢。
它是一個許可軟體。    它是一個開源框架。
 

35.列出Hadoop的主要配置檔案。

以下是Hadoop的主要確認檔案:

  • hadoop-env.sh
  • core-site.xml
  • hdfs-site.xml
  • yarn-site.xml
  • mapred-site.xml
  • masters
  • slaves

 

36、HDFS使用硬體商品儲存資料,故障機率較高。然後解釋一下HDFS是如何保證系統的容錯能力的?

Hadoop 還建立一個備份,稱為複製。因此,如果發生任何故障,Hadoop 中也不應該因為其複製而出現任何錯誤。

如果 HDFS 使用硬體商品儲存資料,失敗的可能性更高。然後HDFS通過塊複製來保證系統的容錯能力。 

  • HDFS 複製塊,然後將其儲存在不同的資料節點上。
  • 這裡預設的複製因子是 3。

 

37、如果HDFS有很多小檔案會出現什麼問題?還提供了克服這個問題的方法。

HDFS 的問題在於,如果我們有很多小檔案,那麼它們的塊就太多了。對於太多的塊,存在太多的後設資料。因此,為了管理如此大量的後設資料是非常困難的。 

但是,我們可以通過使用 Hadoop Archive 來克服這個問題,它將所有 HDFS 小檔案合併到一個具有 .HAR 副檔名的存檔檔案中

>hadoop archieve-archiveName myfilearchive.har /input/location /output/location

 

38. 假設有一個大小為 514MB 的檔案儲存在 Hadoop (Hadoop 2.x) 中,使用預設的塊大小配置和預設複製因子。那麼,總共將建立多少個塊,每個塊的大小是多少?

在 Hadoop 2.x 中,預設複製因子為 3,預設塊大小為 128MB。 

因此,514MB 的檔案可以拆分為:

a    b    C    d    e
128MB    128MB    128MB    128MB    2MB

  • 預設塊大小為 128MB
  • 塊數:514MB128MB=4.05 ≈5塊
  • 複製因子:3
  • 總塊數:5*3=15
  • 總大小:514*3=1542MB

因此,有 15 個大小為 1542MB 的塊。

 

39. 如何將檔案複製到HDFS中與現有block-size配置不同的block-size?

將檔案複製到具有與現有塊大小配置不同的塊大小的 HDFS 可以如下完成: 

32MB=33554432 位元組(預設塊大小:128MB)

hadoop fs-Ddfs.blocksize=33554432-copyFromLocal /local/test.txt /sample_hdfs

  • 檢查 test.txt 的塊大小:

hadoop fs-stat %o /sample_hdfs/test.txt

 

40. HDFS 中的塊掃描器是什麼意思?

HDFS 中的塊掃描器:

  • 塊掃描器基本上保持資料塊的完整性。
  • 它定期在每個資料節點上執行,以驗證資料塊是否正確儲存。

以下是執行此操作的步驟:

  • DataNode 向 NameNode 報告。
  • NameNode 通過使用好的副本來安排新副本的建立。
  • 一旦複製因子達到所需級別,損壞的塊將被刪除。

 

相關文章