【平臺優化】大數據集群一個客戶端參數引起的任務性能差的問題

大數據集群一個客戶端參數引起的任務性能差的問題

  • 背景介紹
  • 排查過程
    • 任務慢的具體原因
      • Executor中數據內存往磁盤溢寫
      • 結果數據寫入分區路徑
    • 分析
    • 解決方案
  • 結語&思考

背景介紹

隨著業務量不斷擴大,平臺逐步發展成HDFS多聯邦的架構,這個過程中,作為平臺維護人員也會對參數進行不定期的優化以應對逐漸繁重的存算壓力。

最近一個重點保障業務的計算任務無法滿足客戶的數據時延要求,客戶很生氣,然后也是各種投訴,然后項目上的同事就拉著一起查了下問題,最終定位到是一個客戶端參數在大體量集群下造成的,記錄一下

排查過程

在對日志進行分析的時候,主要發現了2個導致執行時間延長的點,分開進行說明:

任務慢的具體原因

在定位的時候,主要有2個地方會導致任務執行時間延長;

Executor中數據內存往磁盤溢寫

任務執行過程中,可能會看到下面的這種日志,這樣的日志一般是業務問題導致的,內存不夠用,臨時溢寫磁盤,但是對于一個執行時間達到幾個小時的任務來說,這個并不是主要的原因
在這里插入圖片描述

結果數據寫入分區路徑

先看一個日志的關鍵截圖,首先是9:31分:
在這里插入圖片描述
然后是12:25分的日志
在這里插入圖片描述
上圖中可以看到在創建分區路徑到數據完全寫入完成度過了接近3個小時。

分析

因為可以基本定位到結果數據寫入分區路徑是主要影響任務時長的原因,所以對任務日志進行進一步排查,找找可能得原因;對比慢日志和快日志,有一個明顯區別:

// 執行速度比較快的任務日志
2025-03-19 11:35:16,253 INFO org.apache.hadoop.hive.common.FileUtils: Creating directory if it doesn't exist: viewfs://nsX/ns3/path/.hive-staging_hive_2025-03-19_11-35-16_251_7169943507895305206-1
// 執行速度比較慢的任務日志
2025-03-19 07:35:37,022 INFO org.apache.hadoop.hive.common.FileUtils: Creating directory if it doesn't exist: viewfs://ns0/spark-tmp/stagedir/.hive-staging_hive_2025-03-19_07-35-37_020_688260183047175897-1

這個是在執行計算任務的時候指定的數據臨時寫入的目錄路徑,如果任務提交節點的客戶端配置文件/etc/spark/conf/hive-site.xml中沒有指定hive.exec.stagingdir參數,最終hive-staging就會寫入到表對應的目錄下(這是默認行為)如果客戶端配置了這個參數,就會寫入到參數指定的目錄。

通過日志分析的結果,我們發現任務提交節點的客戶端配置配置了該參數的話,任務執行時間久的數量遠大于那些沒配置該參數的提交節點,對此我們進行了對比:
在這里插入圖片描述
進一步分析下來,確定了問題邏輯,因為集群是聯邦環境,業務表可能存在于任意一個聯邦,如果配置了hive.exec.stagingdir參數,任務執行時臨時數據就會寫入到一個指定的聯邦下,這個時候,如果結果表的路徑在其他聯邦,那么業務邏輯完成后,就會存在跨聯邦復制數據的動作;

而在跨 NameNode 執行 mv 操作時,會涉及到多個 NameNode 之間的元數據交互。源 NameNode 需要告知目標 NameNode 新文件的元數據信息,并且要確保兩個 NameNode 之間的數據一致性。這個過程涉及到網絡通信和同步操作,會增加額外的延遲,從而導致性能下降。

這就和我們在Linux上移動數據一樣,同一個磁盤移動(類比成同聯邦下)數據,只是元數據信息更改,不同磁盤移動數據(跨聯邦)數據,數據會存在塊寫入,就會產生大量IO,分布式集群還涉及到網絡等交互

解決方案

最終,我們決定刪除所有提交節點的hive.exec.stagingdir配置項,這樣,任務提交的時候久采用結果表的同聯邦進行臨時數據的寫入,避免了跨聯邦的數據移動。

結語&思考

其實,對于普通HDFS集群,配置hive.exec.stagingdir參數是很好的選擇,主要有這么幾個優點:

  • 臨時文件寫在一個固定目錄,便于管理
  • 任務失敗時不會主動刪除臨時文件,配置指定目錄能夠更方便的治理廢棄數據

然而,對于大型的聯邦集群,帶寬資源是珍貴的,我們應該盡量減少跨聯邦的數據交換,這個時候,保持原本的配置顯然就不太合理了,讓任務在執行時臨時數據寫在本聯邦下可能是更好的選擇,當然這帶來的問題就是更高的管理成本,以及定期的失敗任務臨時目錄治理需求

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73905.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73905.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73905.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【微信小程序變通實現DeepSeek支持語音】

微信小程序實現錄音轉文字,并調用后端服務(Node.js)進行語音識別和,然后調用DeepSeek 處理的完整實現。 整體架構 前端(微信小程序): 實現錄音功能。將錄音文件上傳到后端。接收后端返回的語音…

uniapp常用組件

寫在前面 今天將uniapp中的組件都過了一遍,上手難度不大,但是還是遇到了一些問題: HBuilder實在是太難用,不管是插件生態還是設計之類的,總之就是用的哪哪不順手雖然打開內置瀏覽器是挺方便的,但是不知道…

【Linux】應用層自定義協議 + 序列化和反序列化

應用層自定義協議 序列化和反序列化 一.應用層1.再談 "協議"2.序列化 和 反序列化 二. Jsoncpp1.序列化2.反序列化 三. Tcp全雙工 面向字節流四.自定義協議 保證報文的完整性1.Makefile2.Mutex.hpp3.Cond.hpp4.Log.hpp5.Thread.hpp6.ThreadPool.hpp7.Common.hpp8.…

二.使用ffmpeg對原始音頻數據重采樣并進行AAC編碼

重采樣:將音頻三元組【采樣率 采樣格式 通道數】之中的任何一個或者多個值改變。 一.為什么要進行重采樣? 1.原始音頻數據和編碼器的數據格式不一致 2.播放器要求的和獲取的數據不一致 3.方便運算 二.本次編碼流程 1.了解自己本機麥克風參數&#x…

器材借用管理系統詳細設計基于Spring Boot-SSM

? 目錄 ?摘要 一、系統概述? ?二、系統架構設計? 2?.1技術選型? ?2.2系統架構? ?三、需求分析 3.1用戶需求分析 3.2功能模塊設計? 3.3、性能需求分析 3.4、安全需求分析 ?四、數據庫設計? ?五、安全性設計? ?六、系統測試與維護? ?七、總結?…

麒麟V10 arm cpu aarch64 下編譯 RocketMQ-Client-CPP 2.2.0

國產自主可控服務器需要訪問RocketMQ消息隊列,最新的CSDK是2020年發布的 rocketmq-client-cpp-2.2.0 這個版本支持TLS模式。 用默認的版本安裝遇到一些問題,記錄一下。 下載Releases apache/rocketmq-client-cpp GitHubhttps://github.com/apache/roc…

C語言每日一練——day_12(最后一天)

引言 針對初學者,每日練習幾個題,快速上手C語言。第十二天。(最后一天,完結散花啦) 采用在線OJ的形式 什么是在線OJ? 在線判題系統(英語:Online Judge,縮寫OJ&#xff0…

網絡安全應急入門到實戰

奇安信:95015網絡安全應急響應分析報告(2022-2024年)官網可以下載 https://github.com/Bypass007/Emergency-Response-Notes 應急響應實戰筆記 網絡安全應急響應技術實戰指南 .pdf 常見場景 第4章 勒索病毒網絡安全應急響應 第5章 挖礦木…

jvm中每個類的Class對象是唯一的嗎

jvm中每個類的Class對象是唯一的嗎 在 Java 中,同一個類的 Class 對象在由同一個類加載器加載時是唯一的。析: 1. 同一類加載器的唯一性 規則:若一個類被同一個類加載器加載,無論創建多少實例,其 Class 對象始終唯一…

Visual Studio里的調試(debugging)功能介紹

參考 1- Introduction to Debugging | Basic Visual Studio Debugging(這是一位印度博主視頻,我下面做到筆記也主要參考她的視頻,但不得不說口音太重了,一股咖喱味) 目錄 個人對調試淺顯的認識和對調試的介紹逐行調…

NLP高頻面試題(六)——decoder-only、encoder-only和encoder-decoder的區別與聯系

一、基本概念與代表模型 1. Encoder-only 架構 Encoder-only 架構最具代表性的模型是 BERT。BERT 使用 masked language modeling(MLM)進行預訓練,即隨機遮蔽部分輸入詞匯,讓模型預測被遮蔽的詞匯。由于這種架構能夠同時看到輸入…

如何判斷 MSF 的 Payload 是 Staged 還是 Stageless(含 Meterpreter 與普通 Shell 對比)

在滲透測試領域,Metasploit Framework(MSF)的 msfvenom 工具是生成 Payload(載荷)的核心利器。然而,當我們選擇 Payload 時,經常會遇到一個問題:這個 Payload 是 Staged(…

基于FPGA的3U機箱模擬量高速采樣板ADI板卡,應用于軌道交通/電力儲能等

板卡簡介: 本板為模擬量高速采樣板(ADI),主要用于電機轉速和相電流檢測,以實現電機閉環控制。 性能規格: 電源:DC5V,DC3.3V,DC15V,DC24V FPGA:…

Gymnasium Cart Pole 環境與 REINFORCE 算法 —— 強化學習入門 2

Title: Gymnasium Cart Pole 環境與 REINFORCE 算法 —— 強化學習入門 2 文章目錄 I. Gymnasium Cart Pole 環境II. REINFORCE 算法1. 原理說明2. REINFORCE 算法實現 I. Gymnasium Cart Pole 環境 Gymnasium Cart Pole 環境是一個倒立擺的動力學仿真環境. 狀態空間: 0: Ca…

Python高級:GIL、C擴展與分布式系統深度解析

文章目錄 📌 **前言**🔧 **第一章:Python語言的本質與生態**1.1 **Python的實現與版本演進**1.2 **開發環境與工具鏈** 🔧 **第二章:元編程與動態特性**2.1 **描述符協議(Descriptor Protocol)*…

C++學習筆記(二十一)——文件讀寫

一、文件讀寫 作用: 文件讀寫指的是將數據從程序存儲到文件,或從文件讀取數據,以實現數據的持久化存儲。 C 提供了 fstream 頭文件,用于文件操作,主要包括: ofstream(輸出文件流)—…

RBA+minibatch的嘗試

目錄 還是咬著牙來寫 RBA了 JAX JAX->TORCH torch tensor的變形 pytorch怎么把一個【3,3,5】的tensor變成【3,10,5】,多的用0填充 pytorch如何把shape【100】轉成【100,1】 把torch shape【100,1】變成【100】 SQUEEZE grad_fn 不能兩次反向傳播 還…

基于Python+Django的二手房信息管理系統

項目介紹 PythonDjango二手房信息管理系統(Pycharm Django Vue Mysql) 平臺采用B/S結構,后端采用主流的Python語言進行開發,前端采用主流的Vue.js進行開發。 整個平臺包括前臺和后臺兩個部分。 - 前臺功能包括:首頁、二手房信息、公告管理、…

爬蟲基礎之爬取貓眼Top100 可視化

網站: TOP100榜 - 貓眼電影 - 一網打盡好電影 本次案例所需用到的模塊 requests (發送HTTP請求) pandas(數據處理和分析 保存數據) parsel(解析HTML數據) pyecharts(數據可視化圖表) pymysql(連接和操作MySQL數據庫) lxml(數據解析模塊) 確定爬取的內容: 電影名稱 電影主演…

解決Qt信號在構造函數中失效的問題

情景引入:音樂播放器的“幽靈列表”問題 假設你正在開發一個音樂播放器應用,其中有一個功能是用戶首次打開應用時,需要從服務器拉取最新的歌曲列表并顯示在“本地音樂”頁面中。你可能會寫出類似這樣的代碼: // LocalSong 類的構…