1. 程式人生 > >spark效能調優 —— 為什麼慢的總是“你”

spark效能調優 —— 為什麼慢的總是“你”

Spark作業效能調優 —— 為什麼慢的總是“你”

背景

業務高峰期,準實時(mini batch)資料處理作業的執行時間現有一些延遲,為了保證作業的SLA,必須及時對作業執行狀況進行排查。

異常原因排查

作業層面

平臺採用的是spark on yarn的部署方案,故直接通過spark作業的application master url進入spark application ui;
通過spark ui 查詢執行變慢的stage;
進入對應的stage之後,通過Summary Metrics可以看出task執行時間差異很大,從task的Input Size來看,輸入資料本身並不存在傾斜;
這裡寫圖片描述


接下來,我們要重點分析“拖後腿”的task, 分析它們究竟遭遇了什麼;
通過對Stage 229中的task按Duration排序,找到執行慢的tasks;通過排序結果我們可以很容易看出,慢的task執行的executor全部集中在224這臺伺服器上;
這裡寫圖片描述
至此,我們初步結論是問題出現在224這臺伺服器上。

伺服器層面

確認過是伺服器的問題後,接下來就藉助open-falcon檢視機器的健康狀況;
首先排查基本指標:

  • load
    • load.1min
    • load.5min
    • load 15min
  • cpu.idle
  • cpu.iowait
  • disk.io.util
  • network
    • net.if.out.errors
    • net.if.in.errors

這裡寫圖片描述
到這裡基本上已經定位出了,是由於機器的eth1網絡卡異常導致這臺機器上的task執行變慢;
由於機器的配置是4塊網絡卡做bond, 所以分配到該臺伺服器上的作業並不會報錯,只是事先速度變慢。

解決方法

臨時下線掉這臺異常伺服器上的NodeManager

${HADOOP_HOME}/bin/yarn-daemon.sh stop nodemanager

下線後,作業執行時間恢復正常。

結論

在Hadoop等分佈環境中底層伺服器的健康狀況對Spark、MR等分散式作業的執行效率有著舉足輕重的影響,因此完善的底層伺服器的監控,對於保障資料平臺的SLA有著深遠的意義。

致謝

感謝平臺運維同事協助定位問題。

相關推薦

spark效能調 —— 為什麼的總是“

Spark作業效能調優 —— 為什麼慢的總是“你” 背景 業務高峰期,準實時(mini batch)資料處理作業的執行時間現有一些延遲,為了保證作業的SLA,必須及時對作業執行狀況進行排查。 異常原因排查 作業層面 平臺採用的是spark on yar

Spark效能調之原理分析

spark效能調優之前先明白原理,具體如下: 使用spark-submit提交一個Spark作業之後,這個作業就會啟動一個對應的Driver程序。根據使用的部署模式(deploy-mode)不同,Driver程序可能在本地啟動,也可能在叢集中某個工作節點上啟動。Driver程序本身會根

Spark效能調---fastutil優化資料格式

Spark中應用fastutil的場景: 1、如果運算元函式使用了外部變數;那麼第一,你可以使用Broadcast廣播變數優化;第二,可以使用Kryo序列化類庫,提升序列化效能和效率;第三,如果外部變數是某種比較大的集合,那麼可以考慮使用fastutil改寫外部變數,首先從源頭上就減少記憶體的佔

spark效能調---Kryo序列化

1.為啥要用Kryo序列化 Spark運算元操作的時候如果用到外部資料的話,都會對外部資料進行序列化,Spark內部是使用Java的序列化機制,ObjectOutputStream / ObjectInputStream,物件輸入輸出流機制,來進行序列化這種預設序列化機制的好處在於,處理起來比較

spark效能調---廣播變數的使用

Broadcast Variables Broadcast variables allow the programmer to keep a read-only variable cached on each machine rather than shipping a copy of it w

Spark效能調 troubleshooting shuffle調 reduce端緩衝大小以避免OOM

reduce導致 記憶體溢位原因 reduce端拉取map端task,是map端寫一點資料,reduce端taskk就會拉取一小部分資料,立即進行後面的聚合、運算元函式應用 每次拉取資料量大小是有buffer決定的,而預設大小是48M,有時候,map端的資料量很大的情況下,reduce端

Spark 效能調 Rdd 之 reduceByKey 本地聚合(也就是map端聚合運算元)

簡單程式碼 val lines = sc.textFile("hdfs://") val words = lines.flatMap(_.split(" ")) val pairs = words.map((_, 1)) val counts = pairs.reduceByKey(_

spark效能調——開發調

開發調優 目錄 開發調優 概述 原則一:避免建立重複的RDD 一個簡單的例子 原則二:儘可能複用同一個RDD 一個簡單的例子 原則三:對多次使用的RDD進行持久化 對多次使用的RDD進行持久化的程式碼示例 Spark的持久化級別 如何選擇一種最合適的持久化

spark效能調:資源優化

在開發完Spark作業之後,就該為作業配置合適的資源了。Spark的資源引數,基本都可以在spark-submit命令中作為引數設定。很多Spark初學者,通常不知道該設定哪些必要的引數,以及如何設定這些引數,最後就只能胡亂設定,甚至壓根兒不設定。資源引數設定的不合理,可能

Spark效能調之廣播變數

廣播變數概述及其優勢廣播變數(groadcast varible)為只讀變數,它有執行SparkContext的driver程式建立後傳送給參與計算的節點。對那些需要讓工作節點高效地訪問相同資料的應用場景,比如機器學習。我們可以在SparkContext上呼叫broadcas

spark效能調:開發調

在大資料計算領域,Spark已經成為了越來越流行、越來越受歡迎的計算平臺之一。Spark的功能涵蓋了大資料領域的離線批處理、SQL類處理、流式/實時計算、機器學習、圖計算等各種不同型別的計算操作,應用範圍與前景非常廣泛。   然而,通過Spark開發出高效能的大資料計算作業

Spark——效能調——Shuffle

一、序引     當以分散式方式處理資料時,常常需要執行map與reduce轉換。由於巨量資料必須從一個節點傳輸到另外的節點,給叢集中的cpu、磁碟、記憶體造成沉重的負載壓力,同時也會給網路頻寬帶來壓力。所以,reduce階段進行的shuffle過程,往往是效

Spark效能調 Shuffle(二)

1.shuffle原理 什麼樣的情況下,會發生shuffle? 在spark中,主要是以下幾個運算元:groupByKey、reduceByKey、countByKey、join,等等。 什麼是shuffle? groupByKey,要把分佈在叢集各個節點上的資料中的同一個key,對

spark效能調(四)調節堆外記憶體和等待時長

調節堆外記憶體!!! executor堆外記憶體 spark底層shuffle使用netty傳輸,所以使用了堆外記憶體!1.2之前是NIO就是socket,之後預設使用netty 有時候,如果你的spark作業處理的資料量特別特別大,幾億資料量;然後spark作業一執行,時

spark效能調(三)shuffle的map端記憶體緩衝reduce端記憶體佔比

效能優化 shuffle spark.shuffle.file.buffer,預設32k spark.shuffle.memoryFraction,0.2 map端記憶體緩衝,reduce端記憶體佔比;很多資料、網上視訊,都會說,這兩個引數, 是調節shuff

spark效能調之重構RDD架構,RDD持久化

當第一次對RDD2執行運算元,獲取RDD3的時候,就會從RDD1開始計算,就是讀取HDFS檔案,然後對RDD1執行運算元,獲取到RDD2,然後再計算,得到RDD3 預設情況下,多次對一個RDD執行運算元,去獲取不同的RDD;都會對這個RDD以及之前的父RDD,全部重新計算

Spark效能調

通常我們對一個系統進行效能優化無怪乎兩個步驟——效能監控和引數調整,本文主要分享的也是這兩方面內容。 效能監控工具 【Spark監控工具】 Spark提供了一些基本的Web監控頁面,對於日常監控十分有用。 1. Application Web UI http://master:4040(預設埠是

Spark效能調之廣播大變數

    本篇blog講述在實際spark專案中可能需要注意的一個性能調優的一個點,就是broadcast大變數。    預設的在spark作業中,task執行的運算元中,使用了外部的變數,每個task都會獲取一份變數的副本,有什麼缺點呢?<br>map,本身是不小

Spark效能調-並行度調

效能調優: 並行度調節 效能調優首先是增加資源,增加Application對應的executor的數量,增加executor裡面的cpu core,然後 增加executor裡面的記憶體大小! 這節課也是非常重要的,因為分配完你所能分配的最大資源了!然後對應你的資源調節你程

Spark效能調之——在實際專案中重構RDD架構以及RDD持久化

一、RDD架構重構與優化是什麼。 儘量去複用RDD,差不多的RDD,可以抽取為一個共同的RDD,供後面的RDD計算時,反覆使用。 二、怎麼做? 快取級別: case "NONE" => NONE case "DISK_ONL