成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

手把手教你 Spark 性能調優

大數據 Spark
集群部分 spark 任務執行很慢,且經常出錯,參數改來改去怎么都無法優化其性能和解決頻繁隨機報錯的問題。

 [[196100]]

0、背景

集群部分 spark 任務執行很慢,且經常出錯,參數改來改去怎么都無法優化其性能和解決頻繁隨機報錯的問題。

看了下任務的歷史運行情況,平均時間 3h 左右,而且極其不穩定,偶爾還會報錯:

1、優化思路

任務的運行時間跟什么有關?

(1)數據源大小差異

在有限的計算下,job的運行時長和數據量大小正相關,在本例中,數據量大小基本穩定,可以排除是日志量級波動導致的問題:

(2)代碼本身邏輯缺陷

比如代碼里重復創建、初始化變量、環境、RDD資源等,隨意持久化數據等,大量使用 shuffle 算子等,比如reduceByKey、join等算子。

在這份100行的代碼里,一共有 3 次 shuffle 操作,任務被 spark driver 切分成了 4 個 stage 串行執行,代碼位置如下:

咱們需要做的就是從算法和業務角度盡可能減少 shuffle 和 stage,提升并行計算性能,這塊是個大的話題,本次不展開詳述。

(3)參數設置不合理

這塊技巧相對通用,咱們來看看之前的核心參數設置:

  1. num-executors=10 || 20 ,executor-cores=1 || 2, executor-memory= 10 || 20,driver-memory=20,spark.default.parallelism=64 

假設咱們的 spark 隊列資源情況如下:

  1. memory=1T,cores=400 

參數怎么設置在這里就有些技巧了,首先得明白 spark 資源的分配和使用原理:

在默認的非動態資源分配場景下, spark 是預申請資源,任務還沒起跑就獨占資源,一直到整個 job 所有 task 結束,比如你跳板機起了一個 spark-shell 一直沒退出,也沒執行任務,那也會一直占有所有申請的資源。(如果設置了 num-executors,動態資源分配會失效)

注意上面這句話,spark 的資源使用分配方式和 mapreduce/hive 是有很大差別的,如果不理解這個問題就會在參數設置上引發其它問題。

比如 executor-cores 設多少合適?少了任務并行度不行,多了會把整個隊列資源獨占耗光,其他同學的任務都無法執行,比如上面那個任務,在 num-executors=20 executor-cores=1 executor-memory= 10 的情況下,會獨占20個cores,200G內存,一直持續3個小時。

那針對本case中的任務,結合咱們現有的資源,如何設置這 5 個核心參數呢?

1) executor_cores*num_executors 不宜太小或太大!一般不超過總隊列 cores 的 25%,比如隊列總 cores 400,***不要超過100,最小不建議低于 40,除非日志量很小。

2) executor_cores 不宜為1!否則 work 進程中線程數過少,一般 2~4 為宜。

3) executor_memory 一般 6~10g 為宜,***不超過 20G,否則會導致 GC 代價過高,或資源浪費嚴重。

4) spark_parallelism 一般為 executor_cores*num_executors 的 1~4 倍,系統默認值 64,不設置的話會導致 task 很多的時候被分批串行執行,或大量 cores 空閑,資源浪費嚴重。

5) driver-memory 早前有同學設置 20G,其實 driver 不做任何計算和存儲,只是下發任務與yarn資源管理器和task交互,除非你是 spark-shell,否則一般 1-2g 就夠了。

Spark Memory Manager:

6)spark.shuffle.memoryFraction(默認 0.2) ,也叫 ExecutionMemory。這片內存區域是為了解決 shuffles,joins, sorts and aggregations 過程中為了避免頻繁IO需要的buffer。如果你的程序有大量這類操作可以適當調高。

7)spark.storage.memoryFraction(默認0.6),也叫 StorageMemory。這片內存區域是為了解決 block cache(就是你顯示調用dd.cache, rdd.persist等方法), 還有就是broadcasts,以及task results的存儲。可以通過參數,如果你大量調用了持久化操作或廣播變量,那可以適當調高它。

8)OtherMemory,給系統預留的,因為程序本身運行也是需要內存的, (默認為0.2)。Other memory在1.6也做了調整,保證至少有300m可用。你也可以手動設置 spark.testing.reservedMemory . 然后把實際可用內存減去這個reservedMemory得到 usableMemory。 ExecutionMemory 和 StorageMemory 會共享usableMemory * 0.75的內存。0.75可以通過 新參數 spark.memory.fraction 設置。目前spark.memory.storageFraction 默認值是0.5,所以ExecutionMemory,StorageMemory默認情況是均分上面提到的可用內存的。

例如,如果需要加載大的字典文件,可以增大executor中 StorageMemory 的大小,這樣就可以避免全局字典換入換出,減少GC,在這種情況下,我們相當于用內存資源來換取了執行效率。

最終優化后的參數如下:

 

效果如下:

(4)通過執行日志分析性能瓶頸

***的任務還需要一個小時,那這一個小時究竟耗在哪了?按我的經驗和理解,一般單天的數據如果不是太大,不涉及復雜迭代計算,不應該超過半小時才對。

由于集群的 Spark History Server 還沒安裝調試好,沒法通過 spark web UI 查看歷史任務的可視化執行細節,所以我寫了個小腳本分析了下前后具體的計算耗時信息,可以一目了然的看到是哪個 stage 的問題,有針對性的優化。

可以看到優化后的瓶頸主要在***寫 redis 的階段,要把 60G 的數據,25億條結果寫入 redis,這對 redis 來說是個挑戰,這個就只能從寫入數據量和 kv 數據庫選型兩個角度來優化了。

(5)其它優化角度

當然,優化和高性能是個很泛、很有挑戰的話題,除了前面提到的代碼、參數層面,還有怎樣防止或減少數據傾斜等,這都需要針對具體的場景和日志來分析,此處也不展開。

2、spark 初學者的一些誤區

對于初學者來說 spark 貌似無所不能而且高性能,甚至在某些博客、技術人眼里 spark 取代 mapreduce、hive、storm 分分鐘的事情,是大數據批處理、機器學習、實時處理等領域的銀彈。但事實確實如此嗎?

從上面這個 case 可以看到,會用 spark、會調 API 和能用好 spark,用的恰到好處是兩碼事,這要求咱們不僅了解其原理,還要了解業務場景,將合適的技術方案、工具和合適的業務場景結合——這世上本就不存在什么銀彈。。。

說道 spark 的性能,想要它快,就得充分利用好系統資源,尤其是內存和CPU:核心思想就是能用內存 cache 就別 spill 落磁盤,CPU 能并行就別串行,數據能 local 就別 shuffle。

責任編輯:武曉燕 來源: oschina博客
相關推薦

2017-10-20 13:41:11

Spark集群代碼

2011-02-22 13:46:27

微軟SQL.NET

2021-07-14 09:00:00

JavaFX開發應用

2011-01-10 14:41:26

2011-05-03 15:59:00

黑盒打印機

2025-05-07 00:31:30

2021-06-07 09:35:11

架構運維技術

2022-03-08 11:17:54

函數指針回調函數C語言

2023-04-26 12:46:43

DockerSpringKubernetes

2022-01-08 20:04:20

攔截系統調用

2022-12-07 08:42:35

2022-03-14 14:47:21

HarmonyOS操作系統鴻蒙

2022-07-27 08:16:22

搜索引擎Lucene

2021-02-26 11:54:38

MyBatis 插件接口

2021-12-28 08:38:26

Linux 中斷喚醒系統Linux 系統

2024-03-05 18:27:43

2024-04-02 08:58:13

2020-08-12 07:41:39

SQL 優化語句

2021-07-01 09:31:50

MySQL SQL 語句數據庫

2023-03-27 08:28:57

spring代碼,starter
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: .国产精品成人自产拍在线观看6 | 精精精精xxxx免费视频 | 亚洲电影一区二区三区 | 亚洲免费在线观看 | 精品视频久久久久久 | 日韩一区二区三区四区五区 | 别c我啊嗯国产av一毛片 | 欧美黄色性生活视频 | 欧美精品久久久久久久久老牛影院 | 超碰97免费在线 | 成人黄色av网址 | 亚洲国产精品久久 | 婷婷激情五月网 | 成人高清在线 | 深夜福利影院 | 精品视频久久久 | 精精国产xxxx视频在线野外 | 婷婷福利| 中文字幕亚洲区一区二 | 国产亚洲欧美在线 | 91精品久久久 | 国产日韩精品在线 | 日韩在线播放一区 | 亚洲成人三级 | 国产成人免费网站 | 99精彩视频 | 欧美日韩国产一区二区三区 | 欧美日韩国产精品激情在线播放 | 亚洲精品乱码久久久久久按摩观 | 日韩1区 | 国产亚洲精品精品国产亚洲综合 | 久久国内精品 | 亚洲欧美一区二区三区情侣bbw | 午夜精品视频一区 | av电影手机版 | 91av视频在线免费观看 | 九九热精品在线视频 | 亚洲精品乱码久久久久久按摩观 | 狠狠操狠狠干 | 国产精品入口麻豆www | 午夜精品一区二区三区在线观看 |