大數據面試題集錦-Hadoop面試題(五)-優化

来源:https://www.cnblogs.com/the-pig-of-zf/archive/2023/07/24/17576338.html
-Advertisement-
Play Games

> 你準備好面試了嗎?這裡有一些面試中可能會問到的問題以及相對應的答案。如果你需要更多的面試經驗和麵試題,關註一下"張飛的豬大數據分享"吧,公眾號會不定時的分享相關的知識和資料。 ## 1、MapReduce優化方法 1)數據輸入 (1)合併小文件:在執行mr任務前將小文件進行合併,大量的小文件會產 ...


你準備好面試了嗎?這裡有一些面試中可能會問到的問題以及相對應的答案。如果你需要更多的面試經驗和麵試題,關註一下"張飛的豬大數據分享"吧,公眾號會不定時的分享相關的知識和資料。

1、MapReduce優化方法

1)數據輸入
  (1)合併小文件:在執行mr任務前將小文件進行合併,大量的小文件會產生大量的map任務,增大map任務裝載次數,而任務的裝載比較耗時,從而導致mr運行較慢。
  (2)採用ConbinFileInputFormat來作為輸入,解決輸入端大量小文件場景。
2)map階段
  (1)減少spill次數:通過調整io.sort.mb及sort.spill.percent參數值,增大觸發spill的記憶體上限,減少spill次數,從而減少磁碟 IO。
  (2)減少merge次數:通過調整io.sort.factor參數,增大merge的文件數目,減少merge的次數,從而縮短mr處理時間。
  (3)在 map 之後先進行combine處理,減少I/O。
3)reduce階段
  (1)合理設置map和reduce數:兩個都不能設置太少,也不能設置太多。太少,會導致task等待,延長處理時間;太多,會導致 map、reduce任務間競爭資源,造成處理超時等錯誤。
  (2)設置map、reduce共存:調整slowstart.completedmaps參數,使map運行到一定程度後,reduce也開始運行,減少reduce的等待時間。
  (3)規避使用reduce,因為Reduce在用於連接數據集的時候將會產生大量的網路消耗。
  (4)合理設置reduce端的buffer,預設情況下,數據達到一個閾值的時候,buffer中的數據就會寫入磁碟,然後reduce會從磁碟中獲得所有的數據。也就是說,buffer和reduce是沒有直接關聯的,中間多個一個寫磁碟->讀磁碟的過程,既然有這個弊端,那麼就可以通過參數來配置,使得buffer中的一部分數據可以直接輸送到reduce,從而減少IO開銷:mapred.job.reduce.input.buffer.percent,預設為0.0。當值大於0的時候,會保留指定比例的記憶體讀buffer中的數據直接拿給reduce使用。這樣一來,設置buffer需要記憶體,讀取數據需要記憶體,reduce計算也要記憶體,所以要根據作業的運行情況進行調整。
4)IO傳輸
  (1)採用數據壓縮的方式,減少網路IO的的時間。安裝Snappy和LZOP壓縮編碼器。
  (2)使用SequenceFile二進位文件
5)數據傾斜問題
  (1)數據傾斜現象
    數據頻率傾斜——某一個區域的數據量要遠遠大於其他區域。
    數據大小傾斜——部分記錄的大小遠遠大於平均值。
  (2)如何收集傾斜數據
    在reduce方法中加入記錄map輸出鍵的詳細情況的功能。

public static final String MAX_VALUES = "skew.maxvalues";
private int maxValueThreshold;

@Override
public void configure(JobConf job) {
     maxValueThreshold = job.getInt(MAX_VALUES, 100);
}

@Override
public void reduce(Text key, Iterator<Text> values,
                     OutputCollector<Text, Text> output,
                     Reporter reporter) throws IOException {
     int i = 0;
     while (values.hasNext()) {
         values.next();
         i++;
     }
     if (++i > maxValueThreshold) {
         log.info("Received " + i + " values for key " + key);
     }
}

(3)減少數據傾斜的方法
    方法1:抽樣和範圍分區
      可以通過對原始數據進行抽樣得到的結果集來預設分區邊界值。
    方法2:自定義分區
      另一個抽樣和範圍分區的替代方案是基於輸出鍵的背景知識進行自定義分區。例如,如果map輸出鍵的單詞來源於一本書。其中大部分必然是省略詞(stopword)。那麼就可以將自定義分區將這部分省略詞發送給固定的一部分reduce實例。而將其他的都發送給剩餘的reduce實例。
    方法3:Combine
      使用Combine可以大量地減小數據頻率傾斜和數據大小傾斜。在可能的情況下,combine的目的就是聚合併精簡數據。

2、MapReduce跑得慢的原因?

Mapreduce 程式效率的瓶頸在於兩點:
1)電腦性能
  CPU、記憶體、磁碟健康、網路
2)I/O 操作優化
  (1)數據傾斜
  (2)map和reduce數設置不合理
  (3)reduce等待過久
  (4)小文件過多
  (5)大量的不可分塊的超大文件
  (6)spill次數過多
  (7)merge次數過多等

3、HDFS小文件優化方法

1)HDFS小文件弊端:
  HDFS上每個文件都要在namenode上建立一個索引,這個索引的大小約為150byte,這樣當小文件比較多的時候,就會產生很多的索引文件,一方面會大量占用namenode的記憶體空間,另一方面就是索引文件過大是的索引速度變慢。
2)解決的方式:
  (1)Hadoop本身提供了一些文件壓縮的方案。
  (2)從系統層面改變現有HDFS存在的問題,其實主要還是小文件的合併,然後建立比較快速的索引。
3)Hadoop自帶小文件解決方案
  (1)Hadoop Archive:
    是一個高效地將小文件放入HDFS塊中的文件存檔工具,它能夠將多個小文件打包成一個HAR文件,這樣在減少namenode記憶體使用的同時。
  (2)Sequence file:
    sequence file由一系列的二進位key/value組成,如果為key小文件名,value為文件內容,則可以將大批小文件合併成一個大文件。
  (3)CombineFileInputFormat:
    CombineFileInputFormat是一種新的inputformat,用於將多個文件合併成一個單獨的split,另外,它會考慮數據的存儲位置。

4、更多大數據面試集錦

  1. 大數據書籍資料分享
  2. 大數據面試題集錦

本文來自博客園,作者:張飛的豬,轉載請註明原文鏈接:https://www.cnblogs.com/the-pig-of-zf/p/17576338.html

公眾號:張飛的豬大數據分享,不定期分享大數據學習的總結和相關資料,歡迎關註。

個人網站"張飛的豬編程工作室"鏈接: https://zhangfeidezhu.com


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 對於磁碟和文件系統來講 Buffer對應磁碟數據的緩存,用於讀或寫。 Cache對應文件數據的頁緩存,用於讀或寫。 **Buffer**可以用來聚合多個寫操作,**Cache**則可以理解為預讀操作,文件系統通過這兩種方式提升磁碟IO性能。 對於網路協議來講 只有**Buffer**的概念,該**B ...
  • 當你使用PlatformIO創建STC89C516+項目後,正準備興緻勃勃的開始51單片機的學習。 突然,一個報錯從天而降! ```txt -- Configuring done -- Generating done CMake Error: Running 'D:/JetBrains/CLion ...
  • 先敘述我的問題出現情況: 我在Windows域賬號中使用smb連接Linux伺服器的共用文件夾時報多重連接的錯,報錯具體信息:“不允許一個用戶使用一個以上用戶名與伺服器或共用資源的多重連接。中斷與此伺服器或共用資源的所有連接,然後再試一次。” 查找並測試過但不成功的方法: 1.刪除Windows憑據 ...
  • ![](https://img2023.cnblogs.com/blog/3076680/202307/3076680-20230724164807364-1834666542.png) # 1. 創建固定大小的數據桶 ## 1.1. 數據放入若幹個大小固定的桶(bucket)里,每個桶的元素個數是 ...
  • 一、Mysql體繫結構 1.1、連接層 最上層是一個客戶端和鏈接服務,主要完成一些類似於鏈接處理,授權認證,及相關的安全方案,伺服器也會為安全接入的而每個客戶端驗證它所具有的操作許可權 1.2、服務層 第二層架構主要完成大多數的核心服務功能,如SQL介面,並完成緩存的查詢,SQL的分析和優化,部分內置 ...
  • 在 Percona MySQL 支持團隊中,我們經常看到客戶抱怨複製延遲的問題。當然,這對 MySQL 用戶來說並不是什麼新鮮事,多年來我們在 MySQL 性能博客上發表過一些關於這個主題的文章(過去有兩篇特別受歡迎的文章:"Reasons for MySQL Replication Lag" 和 ...
  • 在MySQL中,刪除表中數據的方式有多種。下麵是一些常用的方式以及它們的優劣勢: 1. 使用DELETE語句: ```sql DELETE FROM table_name; ``` 優勢:DELETE語句是最常見和簡單的刪除數據方式。它可以刪除表中的所有數據或者根據WHERE子句刪除指定條件的數據。 ...
  • ## 1.概述 **MySQL 8.0.22 開始**,支持非同步連接故障切換機制,在現有主從複製連接失敗後,自動建立到新主的非同步複製連接。 **MySQL 8.0.23 開始**,非同步連接故障切換機制還支持組複製拓撲,通過自動監視組成員身份的更改並區分主節點和從節點,在組複製主節點故障選出新主節點後 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...